692 Stimmen

If else in a list comprehension

Ich habe eine Liste l:

l = [22, 13, 45, 50, 98, 69, 43, 44, 1]

Für Zahlen über 45 einschließlich möchte ich 1 hinzufügen; und für Zahlen darunter 5.

Ich habe versucht

[x+1 for x in l if x >= 45 else x+5]

Aber es gibt mir einen Syntaxfehler. Wie kann ich so etwas wie ein ifelse in einer Listenverständnis erreichen?

22voto

Stefan Gruenwald Punkte 2482

Sie können auch den bedingten Ausdruck in Klammern in die Listenverständigung einfügen:

    l = [22, 13, 45, 50, 98, 69, 43, 44, 1]
    print [[x+5,x+1][x >= 45] for x in l]

[falsch,wahr][Bedingung] ist die Syntax

17voto

szeitlin Punkte 2838

Ich hatte gerade ein ähnliches Problem und fand diese Frage und die Antworten wirklich hilfreich. Hier ist der Teil, bei dem ich verwirrt war. Ich schreibe es explizit auf, weil es eigentlich niemand einfach auf Englisch gesagt hat:

Die Iteration erfolgt am Ende.

Normalerweise läuft eine Schleife so:

für so viele Male:
    if Bedingung: 
        mache diese Sache
    else:
        mache etwas anderes  

Jeder gibt den Teil mit der Listenkomprehension einfach so an, wie es die erste Antwort getan hat,

[ Ausdruck für Element in Liste, wenn Bedingung ] 

aber das ist tatsächlich nicht das, was man in diesem Fall tut. (Ich habe versucht, es auf diese Weise zu tun)

In diesem Fall ist es eher so:

[ Ausdruck wenn Bedingung else anderes Element für so viele Male ]

6voto

Jeet Punkte 36472

Sie könnten die Bedingung zu verschieben:

v = [22, 13, 45, 50, 98, 69, 43, 44, 1]
[ (x+1 if x >=45 else x+5)  for x in v ]

Aber es fängt an ein wenig hässlich auszusehen, daher wäre es vielleicht besser, eine normale Schleife zu verwenden. Beachten Sie, dass ich v statt l für die Listenvariable verwendet habe, um Verwechslungen mit der Zahl 1 zu reduzieren (Ich denke, l und O sollten als Variablennamen unter allen Umständen vermieden werden, auch in schnellem Beispielcode).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X