Die Python-Funktion map(function, *iterables) wendet eine Funktion elementweise auf eines oder mehrere Iterables an und liefert einen Lazy-Iterator mit den Ergebnissen. Sie ist eines der drei klassischen funktionalen Werkzeuge — neben filter() und reduce(). Mit mehreren Iterables wird die Funktion mit je einem Element aus jedem aufgerufen, parallel iteriert wie zip().
Einleitung
map() löst eine sehr häufige Aufgabe: „Wende auf jedes Element diese Transformation an". Klassisch funktional formuliert:
map(f, [a, b, c]) → [f(a), f(b), f(c)]
map() ist lazy: Die Transformationen werden erst bei Bedarf berechnet — bei Iteration oder Materialisierung mit list(). Das macht map() speicher-effizient bei sehr großen oder unendlichen Iterables.
Mit mehreren Iterables wird map() zum „Zip + Apply" in einem Schritt: map(operator.add, [1, 2, 3], [10, 20, 30]) liefert [11, 22, 33]. Sobald das kürzeste Iterable erschöpft ist, endet die Iteration — wie bei zip().
In modernem Python wird map() oft durch List-/Generator-Comprehensions ersetzt, die meist lesbarer sind. map() glänzt vor allem mit vorhandenen, benannten Funktionen (map(int, strings)) — dort ist sie kürzer als [int(s) for s in strings].
Syntax
map(function, iterable)
map(function, iterable1, iterable2, ...)function Eine Funktion, die so viele Argumente nimmt, wie Iterables übergeben werden.
iterable Ein oder mehrere Iterables.
Rückgabewert
Ein map-Iterator. Lazy — wandelt erst bei Iteration oder mit list()/tuple() um.
Beispiele
Einfache Transformation
numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x * x, numbers))
print(squares)[1, 4, 9, 16]Mit benannter Funktion (idiomatisch)
# Strings in int konvertieren — kompakter als Comprehension
raw = ["1", "2", "3", "42"]
numbers = list(map(int, raw))
print(numbers)[1, 2, 3, 42]Mehrere Iterables parallel
from operator import add
a = [1, 2, 3]
b = [10, 20, 30]
sums = list(map(add, a, b))
print(sums)[11, 22, 33]Lazy verhalten
def laut(x):
print(f" process {x}")
return x * 10
m = map(laut, [1, 2, 3])
print("vor next:")
print(next(m))
print("vor weiterer iteration:")
for x in m:
print(x)vor next:
process 1
10
vor weiterer iteration:
process 2
20
process 3
30Praktische Beispiele
CSV-Zeilen in Tupel parsen
lines = ["Alice,17", "Bob,24", "Cleo,31"]
records = [(name, int(alter)) for name, alter in (z.split(",") for z in lines)]
print(records)[('Alice', 17), ('Bob', 24), ('Cleo', 31)]Strings normalize
input_value = [" Alice ", "BOB", "Cleo\n"]
# str.strip ist eine ungebundene Methode → mit map natürlich nutzbar
cleaned = list(map(str.strip, map(str.lower, input_value)))
print(cleaned)['alice', 'bob', 'cleo']map vs. Comprehension
# map: kompakt mit benannter Funktion
numbers = list(map(int, ["1", "2", "3"]))
# Comprehension: lesbarer mit Logik
squares_even = [x * x for x in range(10) if x % 2 == 0]Praktische Hinweise
list(map(f, xs))≈[f(x) for x in xs]— bei Lambda meist die Comprehension wählen, bei benannter Funktionmap().- Lazy:
map()verbraucht keinen Speicher bis Iteration. Materialisierung vialist(),tuple()oderfor-Schleife. - Mehrere Iterables: stoppt beim kürzesten — wie
zip(). - Verwandte Werkzeuge:
filter()(Bedingung),functools.reduce()(Aggregation),itertools.starmap()(für Tupel-Argumente).