S'il y a une instruction if ... else dans la notation inclusive de la liste (https://docs.python.org/ja/3.7/tutorial/datastructures.html#list-comprehensions), les débutants sont confus quant à l'ordre dans lequel le code est lu. Je pense qu'il y a quelque chose.
>>> x = [8,1,7,2,6,3,5,4]
>>> l1 = [i for i in x if i > 5]
>>> l1
[8, 7, 6]
Ici, «si i> 5» fait partie de la notation d'inclusion. Équivalent au code suivant:
>>> 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]
Ici, «i if i> 5 else 0» n'est pas une syntaxe inclusive. Équivalent au code suivant:
>>> l2 = []
>>> for i in x:
... l2.append(i if i > 5 else 0)
...
>>> l2
[8, 0, 7, 0, 6, 0, 0, 0]
Le «i if i> 5 else 0» ci-dessus est une opération appelée expressions conditionnelles.
>>> i = 6
>>> i if i > 5 else 0
6
>>> i = 4
>>> i if i > 5 else 0
0
Dans l'expression conditionnelle, je me fâche s'il n'y a pas d'autre.
>>> i = 6
>>> i if i > 5
File "<stdin>", line 1
i if i > 5
^
SyntaxError: invalid syntax
Alors Même si vous écrivez comme suit, vous vous fâcherez également.
>>> 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