255 votes

Compréhension de listes en une ligne : variantes if-else

Il s'agit plutôt de la syntaxe de compréhension des listes en python. J'ai une compréhension de liste qui produit une liste de nombres impairs dans un intervalle donné :

[x for x in range(1, 10) if x % 2]

Cela fait un filtre - j'ai une liste de sources, où j'enlève les numéros pairs ( if x % 2 ). J'aimerais utiliser quelque chose comme if-then-else ici. Le code suivant échoue :

>>> [x for x in range(1, 10) if x % 2 else x * 100]
  File "<stdin>", line 1
    [x for x in range(1, 10) if x % 2 else x * 100]
                                         ^
SyntaxError: invalid syntax

Il existe une expression python comme if-else :

1 if 0 is 0 else 3

Comment l'utiliser à l'intérieur d'une liste de compréhension ?

1 votes

Pour ce que ça vaut, vous avez une "compréhension de liste", pas un générateur. La syntaxe ultime est la même, sauf que les générateurs utilisent la fonction () au lieu de [] .

0 votes

2 votes

Il m'a fallu un moment pour comprendre pourquoi if x % 2 élimine les nombres pairs (au lieu de les conserver) - c'est parce que lorsque les x est même le x % 2 entraîne 0 qui, à son tour, est évalué à False alors que tout int sauf 0 évalue à True .

3voto

anudeep Points 138

J'ai pu faire ceci

>>> [x if x % 2 != 0 else x * 100 for x in range(1,10)]
    [1, 200, 3, 400, 5, 600, 7, 800, 9]
>>>

0voto

Jagat Deshmukh Points 1

Compréhension de deux pour en une liste

ex = [['obi', 'is', '#alive'],['oge', 'is', 'beautiful'],
                ['Ade', 'the', '#comedian', 'de', '#rich'],['Jesus', 'wept']]
res = [j if j.startswith("#") else "_"+j for i in ex for j in i]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X