HOWTO · Python
Eine Funktion auf eine Liste in Python anwenden
Es gibt 4 Hauptmethoden, um eine Funktion auf eine Liste in Python anzuwenden: die for-Schleife, die Funktion map(), die List Comprehension und den Generatorausdruck.
Auf dieser Seite
Um eine Funktion auf jedes Element einer Python-Liste anzuwenden, rufen Sie sie für jedes Element auf und sammeln die Rückgabewerte. Werden beispielsweise alle Zahlen mit 10 multipliziert, wird aus [1, 2, 3, 4] die Liste [10, 20, 30, 40]. Dafür eignen sich eine for-Schleife, map(), eine Listenkomprehension oder ein Generatorausdruck. Die folgenden Beispiele verwenden dieselbe Funktion und Eingabeliste, damit Sie vergleichen können, wie die einzelnen Ansätze die Ergebnisse erzeugen oder bereitstellen.
Eine Funktion mit einer for-Schleife auf eine Python-Liste anwenden
Eine for-Schleife macht jeden Schritt nachvollziehbar: Erstellen Sie eine Ergebnisliste, rufen Sie die Funktion für jede Eingabe auf und hängen Sie jeden Rückgabewert an. Das ist hilfreich, wenn die Schleife zusätzliche Anweisungen oder Verzweigungen benötigt. Das folgende Beispiel wendet die Funktion auf jede Zahl an und gibt die Ergebnisliste aus.
def multiply_by_ten(number):
return 10 * number
numbers = [1, 2, 3, 4]
results = []
for number in numbers:
results.append(multiply_by_ten(number))
print(results)
Die Schleife lässt numbers unverändert und erstellt results als separate Liste. Passen Sie den Funktionskörper an die Transformation an, die Ihre Daten benötigen.
Die Funktion map() auf eine Python-Liste anwenden
Pythons map()-Funktion erhält eine aufrufbare Funktion und ein Iterable und liefert anschließend für jedes Element das Ergebnis des Funktionsaufrufs. In Python 3 gibt map() einen Iterator zurück. Umschließen Sie ihn mit list(), wenn Ihr weiterer Code eine Liste benötigt.
def multiply_by_ten(number):
return 10 * number
numbers = [1, 2, 3, 4]
results = list(map(multiply_by_ten, numbers))
print(results)
Diese Schreibweise ist kompakt, wenn Sie bereits eine anzuwendende Funktion haben. Der Iterator wird verbraucht, während list() seine Werte abruft. Wenn Sie die Werte erneut durchlaufen müssen, behalten Sie die entstandene Liste oder erstellen Sie einen weiteren Iterator.
Eine Listenkomprehension verwenden, um eine Funktion auf eine Python-Liste anzuwenden
Eine Listenkomprehension erstellt eine neue Liste, indem der Ausdruck für jedes Element vor die for-Klausel gesetzt wird. Sie ist ein Sprachkonstrukt von Python und keine Methode. Sie eignet sich als kompakte Lösung, wenn sich die Transformation übersichtlich in einer Zeile ausdrücken lässt.
def multiply_by_ten(number):
return 10 * number
numbers = [1, 2, 3, 4]
results = [multiply_by_ten(number) for number in numbers]
print(results)
Der Ausdruck multiply_by_ten(number) bestimmt jedes Ergebnis, während die for-Klausel jeweils ein Eingabeelement liefert. Eine Listenkomprehension kann auch eine Bedingung enthalten, wenn nur ausgewählte Elemente übernommen werden sollen.
Einen Generatorausdruck verwenden, um eine Funktion auf eine Python-Liste anzuwenden
Ein Generatorausdruck setzt einen Ausdruck nach Art einer Listenkomprehension in Klammern. Er erzeugt Werte erst dann, wenn sie angefordert werden, statt sofort eine Ergebnisliste zu erstellen. So müssen möglicherweise nicht alle umgewandelten Werte gleichzeitig im Speicher gehalten werden. Wenn Sie den Generator jedoch in eine Liste umwandeln, werden die Werte materialisiert.
def multiply_by_ten(number):
return 10 * number
numbers = [1, 2, 3, 4]
results = (multiply_by_ten(number) for number in numbers)
print(list(results))
Jeder Wert wird beim Durchlaufen erzeugt. Ein Generator wird dabei verbraucht; ein zweiter Durchlauf über denselben Generator liefert die Werte daher nicht erneut. Erstellen Sie einen neuen Generator oder speichern Sie die Werte in einer Liste, wenn Sie sie wiederverwenden möchten.
Fazit
Verwenden Sie eine for-Schleife, wenn Sie jeden Schritt gezielt steuern möchten, und map(), wenn sich eine vorhandene Funktion gut auf ein Iterable anwenden lässt. Eine Listenkomprehension erstellt mit kompakter Syntax direkt eine neue Liste. Ein Generatorausdruck eignet sich, wenn Sie Werte verzögert durchlaufen und nicht sofort alle Ergebnisse materialisieren möchten. Alle vier Ansätze funktionieren sowohl mit eingebauten Funktionen als auch mit selbst definierten Funktionen. Mit einer Listenkomprehension lässt sich beispielsweise str auf jedes Element anwenden: [str(item) for item in numbers].