Wenn die Inclusive Notation der Liste eine if ... else-Anweisung enthält (https://docs.python.org/ja/3.7/tutorial/datastructures.html#list-comprehensions), sind Anfänger verwirrt über die Reihenfolge, in der der Code gelesen wird. Ich denke da ist etwas.
>>> x = [8,1,7,2,6,3,5,4]
>>> l1 = [i for i in x if i > 5]
>>> l1
[8, 7, 6]
Hier ist "wenn i> 5" Teil der Einschlussnotation. Entspricht dem folgenden Code:
>>> l1 = []
>>> for i in x:
... if i > 5:
... l1.append(i)
...
>>> l1
[8, 7, 6]
>>> l2 = [i if i > 5 else 0 for i in x]
>>> l2
[8, 0, 7, 0, 6, 0, 0, 0]
Hier ist "i wenn i> 5 else 0" keine inklusive Syntax. Entspricht dem folgenden Code:
>>> l2 = []
>>> for i in x:
... l2.append(i if i > 5 else 0)
...
>>> l2
[8, 0, 7, 0, 6, 0, 0, 0]
Das obige "i wenn i> 5 else 0" ist eine Operation namens bedingter Ausdruck.
>>> i = 6
>>> i if i > 5 else 0
6
>>> i = 4
>>> i if i > 5 else 0
0
Im bedingten Ausdruck werde ich wütend, wenn es nichts anderes gibt.
>>> i = 6
>>> i if i > 5
File "<stdin>", line 1
i if i > 5
^
SyntaxError: invalid syntax
Damit Selbst wenn Sie wie folgt schreiben, werden Sie auch wütend.
>>> l3 = [i if i > 5 for i in x]
File "<stdin>", line 1
l3 = [i if i > 5 for i in x]
^
SyntaxError: invalid syntax
if/else in a list comprehension?
Recommended Posts