Die aktuellen Antworten sind gut, aber sprechen Sie nicht darüber, wie sie nur syntaktischer Zucker für ein Muster sind, an das wir so gewöhnt sind.
Beginnen wir mit einem Beispiel, sagen wir, wir haben 10 Zahlen, und wir wollen eine Teilmenge von denen, die größer als beispielsweise 5 sind.
>>> numbers = [12, 34, 1, 4, 4, 67, 37, 9, 0, 81]
Für die obige Aufgabe sind die folgenden Ansätze völlig identisch und gehen von ausführlich bis prägnant, lesbar und pythonisch :
Ansatz 1
result = []
for index in range(len(numbers)):
if numbers[index] > 5:
result.append(numbers[index])
print result
Ansatz 2 (etwas sauberere For-In-Schleifen)
result = []
for number in numbers:
if number > 5:
result.append(number)
print result
Ansatz 3 (Listenverständnis eingeben)
result = [number for number in numbers if number > 5]
oder allgemeiner:
[function(number) for number in numbers if condition(number)]
wo:
function(x)
ein nimmt x
und verwandelt es in etwas Nützliches (wie zum Beispiel: x*x
)
- Wenn
condition(x)
ein False-y-Wert zurückgegeben wird (False, None, leere Zeichenfolge, leere Liste usw.), wird die aktuelle Iteration übersprungen (think continue
). Wenn die Funktion einen Nicht-False-y-Wert zurückgibt, gelangt der aktuelle Wert zum endgültigen resultierenden Array (und durchläuft den obigen Transformationsschritt).
Um die Syntax etwas anders zu verstehen, lesen Sie den Abschnitt Bonus unten.
Weitere Informationen finden Sie im Tutorial, das alle anderen Antworten verlinkt haben: Listenverständnis
Bonus
(Etwas unpythonisch, aber der Vollständigkeit halber hier)
Das obige Beispiel kann wie folgt geschrieben werden:
result = filter(lambda x: x > 5, numbers)
Der obige allgemeine Ausdruck kann wie folgt geschrieben werden:
result = map(function, filter(condition, numbers))
python "* for * in * if"
und dies war der erste Treffer secnetix.de/olli/Python/list_comprehensions.hawk