Ist, wenn/sonst/wenn möglich in list comprehension?
Ich würde gerne wissen, ob es möglich ist, verwenden Sie eine list-comprehension mit if
/else
müssen nicht dazu führen, in eine Liste der gleichen Länge wie die Länge der Liste bearbeitet wird? (dh. ohne den letzten else
)
>>> L = [0, 1, 2, 3, 4, 5, 6]
>>> [v * 10 if v < 3 else v * 2 if v > 3 else v for v in L] #if/else/if/else
[0, 10, 20, 3, 8, 10, 12]
funktioniert einwandfrei. Aber angenommen, ich möchte das weglassen der 3, erhalten:
[0, 10, 20, 8, 10, 12] # No number 3
Ich hätte gedacht, dass das funktionieren würde:
>>> [v * 10 if v < 3 else v * 2 if v > 3 for v in L] #if/else/if
Aber es ist ein syntax-Fehler..
So, ich dachte, 'vielleicht' das funktionieren würde:
>>> [v * 10 if v < 3 else v * 2 if v > 3 else pass for v in L] #if/else/if/else pass
Aber es funktioniert nicht..
Dies ist eine Neugier Frage, ich weiß, dass es nicht zwangsweise die meisten lesbar/geeignete Ansatz, um die obige Verarbeitung.
Bin ich etwas fehlt? Kann es getan werden?
(Ich bin auf python 2.6.5)
InformationsquelleAutor fraxel | 2012-03-16
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, das ist möglich:
Oder in deinem Fall:
Ich auch erwähnt in die docs.
[expr_of_x for x in iterable if expr_of_x]
, aber wo(a if b else c)
ist der Ausdruck. Sie können auch halten Sie die Klammern, um die Liste Verständnis mehr offensichtlich an die Leser.Setzen Sie die Filterung Bedingung nach der Schleife:
gibt
Whats falsch mit machen