237 votes

Est-il possible d'utiliser 'else' dans une compréhension de liste python?

Voici le code que je tentais de transformer en compréhension de liste:

 table = ''
for index in xrange(256):
    if index in ords_to_keep:
        table += chr(index)
    else:
        table += replace_with
 

Y a-t-il un moyen d'ajouter l'énoncé else à cette compréhension?

 table = ''.join(chr(index) for index in xrange(15) if index in ords_to_keep)
 

382voto

Amber Points 159296

La syntaxe a if b else c est un opérateur ternaire en Python dont le résultat est évalué à a si la condition b est vraie - sinon, elle est évaluée à c . Il peut être utilisé dans les énoncés de compréhension:

 >>> [a if a else 2 for a in [0,1,0,3]]
[2, 1, 2, 3]
 

Donc, pour votre exemple,

 table = ''.join(chr(index) if index in ords_to_keep else replace_with
                for index in xrange(15))
 

16voto

Michael Mrozek Points 44120

Si vous voulez un else vous ne voulez pas filtrer la compréhension de la liste, vous voulez qu'il répète chaque valeur. Vous pouvez utiliser true-value if cond else false-value comme instruction à la place et supprimer le filtre de la fin:

 table = ''.join(chr(index) if index in ords_to_keep else replace_with for index in xrange(15))
 

1voto

Donald Miner Points 18116

Aussi, suis-je en droit de conclure qu'une compréhension de liste est le moyen le plus efficace pour ce faire?

Peut-être. Interprétations de la liste ne sont pas intrinsèquement de calcul efficace. Il est toujours en cours d'exécution dans le temps linéaire.

De mon expérience personnelle: J'ai considérablement réduit le temps de calcul lorsque le traitement de grands ensembles de données en remplaçant les interprétations de la liste (plus précisément imbriquée) avec une boucle for/liste-ajouter des structures de type que vous avez ci-dessus. Dans cette application, je doute que vous remarquerez une différence.

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