Wie kann ich Folgendes in Python tun?if/else in Pythons Listenverständnis?
row = [unicode(x.strip()) for x in row if x is not None else '']
Im Wesentlichen:
- ersetzen alle Nones mit leeren Saiten, und dann
- eine Funktion auszuführen.
Wie kann ich Folgendes in Python tun?if/else in Pythons Listenverständnis?
row = [unicode(x.strip()) for x in row if x is not None else '']
Im Wesentlichen:
Sie können völlig tun, es ist nur eine Bestell Ausgabe:
[ unicode(x.strip()) if x is not None else '' for x in row ]
Beachten Sie, dass dies tatsächlich ein anderes Sprachkonstrukt verwendet, ein conditional expression, die sich nicht Teil der comprehension syntax sind, während die if
nach der for…in
ist Teil der Liste Comprehensions und verwendet Filter Elemente aus der Quelle iterierbar.
Bedingte Ausdrücke können in allen Situationen verwendet werden, in denen Sie basierend auf einer Bedingung zwischen zwei Ausdruckswerten wählen möchten. Dies entspricht dem ternary operator ?:
that exists in other languages. Zum Beispiel:
value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')
Beachten Sie, dass das if/else hier jetzt "ternary operator" -Syntax und nicht Listenverständnissyntax ist. –
Angesichts der vorherigen Frage von OP ist @ Adams Bemerkung sehr wichtig! – delnan
Deshalb ziehe ich es vor, den ternären Operator in Klammern zu setzen, es macht deutlicher, dass es nur ein normaler Ausdruck ist, kein Verständnis. –
One way:
def change(f):
if f is None:
return unicode(f.strip())
else:
return ''
row = [change(x) for x in row]
Obwohl dann Sie haben:
row = map(change, row)
Oder Sie können einen Lambda-Inline verwenden.
Dies ist auch eine gute (vielleicht nur) Technik, die verwendet werden muss, wenn Sie mögliche Ausnahmen von dem 'if'-Ausdruck oder -Code in seinem oder dem' else's-Anweisungsblock behandeln müssen. Die angenommene Antwort ist besser für einfache Fälle. – martineau
Dies ist viel einfacher zu lesen als in einem Listenverständnis zu verwenden. –
Hier ist ein weiteres erläuterndes Beispiel:
>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!")
Ha, ha, ha!
Es nutzt die Tatsache, dass if i
range()
von der Funktion erzeugt für 0
und True
für alle anderen Werte auf False
auswertet. Deshalb ist die Liste Verständnis bewertet wie folgt:
>>> ["ha" if i else "Ha" for i in range(3)]
['Ha', 'ha', 'ha']
möglich Duplikat [? Ist es möglich, ‚sonst‘ in einem Python-Liste Verständnis zu verwenden] (http://stackoverflow.com/questions/2951701/is-it- potential-to-use-else-in-a-python-list-Verständnis) –