Die Python-Funktion len(obj) liefert die Anzahl der Elemente eines Objekts: Zeichen eines Strings, Elemente einer Liste, Schlüssel eines Dictionaries, Bytes eines Bytestrings. Intern ruft sie obj.__len__() auf — Custom-Klassen können diese Methode implementieren, um sich messbar zu machen. Bei nicht messbaren Objekten wirft len() einen TypeError.
Einleitung
len() ist eine der meistverwendeten Builtin-Funktionen Pythons. Sie funktioniert auf allen Sized-Objekten — alles, was eine __len__()-Methode hat. Das Ergebnis ist immer eine nicht-negative Ganzzahl.
Wichtig: len() zählt nur direkte Elemente, nicht rekursiv. len([[1, 2], [3, 4, 5]]) ist 2, nicht 5.
Bei Strings zählt len() Code-Points (str ist Unicode-basiert), nicht Bytes — wer Bytes-Längen braucht, kodiert vorher mit .encode() in bytes und misst dort. Bei Generatoren funktioniert len() nicht — die wissen ihre Länge nicht im Voraus.
Syntax
len(s)s Eine Sequenz (str, list, tuple, bytes, bytearray, range), eine Sammlung (dict, set, frozenset) oder ein Custom-Objekt mit __len__().
Rückgabewert
Eine nicht-negative int, die die Anzahl der Elemente angibt.
Beispiele
Verschiedene Typen
print(len("Hallo"))
print(len([1, 2, 3, 4]))
print(len((1, 2)))
print(len({"a": 1, "b": 2}))
print(len({1, 2, 3, 3})) # Set: Duplikate zählen nur einmal
print(len(b"bytes"))
print(len(range(100)))5
4
2
2
3
5
100Unicode vs. Bytes
text = "Müller"
print(len(text)) # 6 Zeichen
print(len(text.encode("utf-8"))) # 7 Bytes (ü ist 2 Bytes)6
7Custom-Klasse mit __len__
class Cart:
def __init__(self):
self.items = []
def __len__(self):
return len(self.items)
w = Cart()
w.items.extend(["Brot", "Käse", "Wein"])
print(len(w))3Praktische Beispiele
Truthy-Check via len
# Wenn __len__ definiert ist, gilt: leere Sammlung → falsy
for x in [[], [1], "", "hi", {}, {"a": 1}]:
print(f"{x!r:10} → {bool(x)}")[] → False
[1] → True
'' → False
'hi' → True
{} → False
{'a': 1} → TrueLängste Eintrag in einer Liste finden
words = ["Apfel", "Birne", "Wassermelone", "Kiwi"]
longest = max(words, key=len)
print(longest)WassermeloneGenerator hat keine Länge
gen = (x * 2 for x in range(10))
try:
print(len(gen))
except TypeError as e:
print(e)
# Workaround: in Liste umwandeln (verbraucht Speicher!)
print(len(list(gen)))object of type 'generator' has no len()
10Praktische Hinweise
- O(1) bei allen Builtins:
len()ist konstant — die Länge wird nicht durch Iteration gezählt, sondern als Attribut gespeichert. - Leerer Container ist falsy:
if not items:ist idiomatischer alsif len(items) == 0:. - Strings = Code-Points, nicht Bytes oder Grapheme-Cluster (Emojis können mehrere Code-Points haben).
- Generatoren haben keine Länge — vorher in
list()materialisieren oder mitsum(1 for _ in gen)zählen (verbraucht den Generator). - Custom-Klasse mit
__len__(): gilt automatisch als Sized-Container und beeinflusstbool()sowieif-Check.