Python list comprehension - einfach
Habe ich eine Liste und ich möchte, um eine bestimmte Funktion nur auf jene Einträge, dass es erfüllt eine bestimmte Bedingung - wobei die anderen Einträge unverändert.
Beispiel: angenommen, ich möchte mal 2 nur diejenigen Elemente, die sogar.
a_list = [1, 2, 3, 4, 5]
Wollte Ergebnis:
a_list => [1, 4, 3, 8, 5]
Aber [elem * 2 for elem in a_list if elem %2 == 0]
Erträge [4, 8]
(es wirkte wie ein filter und zusätzlich).
Was ist der richtige Weg, um darüber zu gehen?
InformationsquelleAutor Lost_DM | 2011-10-01
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden bedingten Ausdruck:
(Math-geek-Hinweis: Sie können auch lösen, in diesem speziellen Fall mit
aber ich würde die erste Möglichkeit bevorzugen sowieso 😉
oder, wenn Sie haben eine sehr lange Liste, die Sie ändern möchten in Ort:
so, nur die geraden Elemente sind geändert
a_list[:] = list_comprehension
Arbeit zu für in-place-Ersatz? Und das ohne Schleife in python?reversed(a_list)
oder einen generator, der ergibt, dass weniger Elemente als die Länge der Liste. Nicht etwas, was ich gedacht habe, das zu tun, bevor; danke für die Idee :).Könnten Sie lambda:
Bearbeiten - Nachdenken über agf's Bemerkung machte ich eine 2. version von meinem code:
condition and true_value or false_value
zu emulieren, die ternäre operation; es ist ein wirklich version in Python. Auch gibt es keine Notwendigkeit, wickeln Sie es in einem lambda-Ausdruck entweder so, wie es ist ein Ausdruck einer Anweisung, sondern es funktioniert direkt in der Liste erfassen.lambda
s haben die gleiche Einschränkung, es ist also nie ein muss für einen in einer Liste Verständnis-oder generator-Ausdruck.lambda x:
undf()
ist 12 Zeichen[ for i in a_list]
18 -- also du machst es übersichtlicher und schneller, indem er den Ausdruck inline-anstatt in einemlambda
für nur sechs Zeichen, wenn Sie haben eine ganze separate Liste Verständnis, anstatt nur eine neue Funktion.