Im Zweifelsfall nicht Listenkomprehensionen verwenden.
Versuchen import this
in Ihrer Python-Shell und lesen Sie die zweite Zeile:
Explicit is better than implicit
Diese Art der Compoundierung von Listenkomprehensionen viel Python-Programmierer Puzzle wird so zumindest einen Kommentar hinzufügen zu erklären, dass Sie Zeichenfolgen zu entferne und flacht die verbleibende Liste ab.
Verwenden Sie Listenübersichten, wo sie klar und einfach zu verstehen sind, und insbesondere, wenn sie idiomatisch sind, d. H. Häufig verwendet, weil sie die effizienteste oder eleganteste Art sind, etwas auszudrücken. Zum Beispiel gibt this Python Idioms article das folgende Beispiel:
result = [3*d.Count for d in data if d.Count > 4]
Es ist klar, einfach und unkompliziert. Das Verschachteln von Listenlisten ist nicht schlecht, wenn Sie auf die Formatierung achten und vielleicht einen Kommentar hinzufügen, weil die Klammern dem Leser helfen, den Ausdruck zu zerlegen. Aber die Lösung, die für dieses Problem akzeptiert wurde, ist meiner Meinung nach zu komplex und verwirrend. Es überschreitet die Grenzen und macht den Code für zu viele Menschen unlesbar. Es ist besser, mindestens eine Iteration in eine for-Schleife aufzurollen.
Ich verstehe nicht die Notwendigkeit der x für x in Ihrem Fall. Warum benutzt du nicht einfach alle = [t [1] für t in Tests? – luc
'[t [1] für t in Tests]' gibt eine Liste von Tupeln zurück. '[x für t in Tests für x in t [1]]' ist eine flache Liste (Verkettung dieser Tupel). –