[PYTHON] Si ... sinon dans la notation d'inclusion

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]

Notation d'inclusion si

>>> 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]

Si ... sinon dans la notation d'inclusion

>>> 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]

Expression conditionnelle

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

Au fait

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

référence

if/else in a list comprehension?

Recommended Posts

Si ... sinon dans la notation d'inclusion
FizzBuzz en notation d'inclusion de liste
[Route vers Python intermédiaire] Utiliser l'instruction if dans la notation d'inclusion de liste
Jugement du if par la notation d'inclusion de liste
Je veux imprimer dans la notation d'inclusion
Vérifiez si l'URL existe en Python
Python / dictionary> setdefault ()> Ajouter si pas dans le dictionnaire