1683 votes

Python: si/d'autre dans la compréhension de liste?

Comment puis-je effectuer les opérations suivantes en Python?

    row = [unicode(x.strip()) for x in row if x is not None else '']

Essentiellement, (1) remplacer tous les Nvos avec les cordes à vide, puis (2) exécuter une fonction.

Merci!

2816voto

poke Points 64398

Vous pouvez tout à fait faire ça, c'est juste un problème de la commande:

[ unicode(x.strip()) if x is not None else '' for x in row ]

Note que c'est en fait utilise une langue différente construire, une expression conditionnelle, qui lui-même ne fait pas partie de la compréhension de la syntaxe, tandis que l' if après l' for…in fait partie de la liste des inclusions et utilisé pour filtrer les éléments de la source itératif.

52voto

Adam Vandenberg Points 8098

D'une manière:

def change(f):
    if f is None:
        return unicode(f.strip())
    else:
        return ''

row = [change(x) for x in row]

Bien que vous avez:

row = map(change, row)

Ou vous pouvez utiliser une lambda en ligne.

47voto

Bengt Points 2327

Voici un autre exemple:

>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!")
Ha, ha, ha!

Il exploite le fait que l' if i évalue False pour 0 et True pour toutes les autres valeurs générées par la fonction range(). Par conséquent, la compréhension de liste évalue comme suit:

>>> ["ha" if i else "Ha" for i in range(3)]
['Ha', 'ha', 'ha']

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