HOWTO · Python
Länge eines Python-Arrays ermitteln
In diesem Artikel wird erläutert, wie Sie die Länge eines Python-Objekts mithilfe der Funktion len() oder der Methode __len__() ermitteln.
Auf dieser Seite
Die Länge eines Python-Arrays oder einer Liste lässt sich meist mit einem einzigen Aufruf von len() ermitteln. Die Funktion gibt die Anzahl der Elemente eines Objekts mit bekannter Länge zurück, etwa einer Liste, eines Tupels, einer Zeichenkette, eines Dictionaries oder eines array.array. Über Pythons Längenprotokoll kann auch eine eigene Klasse festlegen, wie ihre Instanzen gezählt werden. Manche Iteratoren, darunter Generatoren, haben keine feste Länge und erfordern daher einen anderen Ansatz.
Die Länge einer Python-Liste mit len() ermitteln
Übergib die Liste an die eingebaute Funktion len(). Das Ergebnis ist eine Ganzzahl, die die Anzahl der Elemente angibt – unabhängig davon, welche Werte in der Liste stehen.
Führe dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
my_list = [1, 2, 3, 4, 5]
length_of_list = len(my_list)
print(length_of_list)
Dieses Beispiel gibt die Anzahl der Listenelemente aus. Dasselbe Vorgehen funktioniert mit Listen aus Zeichenketten, Zahlen oder anderen Objekten. Gezählt werden die Elemente auf der äußeren Ebene. Enthält eine Liste verschachtelte Listen, addiert len() deren Elemente nicht.
Die Länge anderer Python-Objekte ermitteln
len() funktioniert mit Objekten, die eine Länge bereitstellen. Bei einer Zeichenkette gibt die Funktion die Anzahl der Unicode-Codepoints zurück. Das entspricht nicht unbedingt der Zahl der Zeichen, die Menschen wahrnehmen, wenn ein Zeichen aus mehreren Codepoints besteht. Bei einem Dictionary zählt sie die Schlüssel. Auch ein Tupel, eine Menge, ein Bytes-Objekt und ein array.array geben ihre Elementanzahl zurück. Zum Beispiel liefert len("Python") die Anzahl der Codepoints in dieser Zeichenkette, während len({"name": "Ada", "language": "Python"}) die beiden Schlüssel zählt.
Dass ein Objekt iterierbar ist, bedeutet nicht automatisch, dass es eine Länge hat. len() zählt Elemente nicht, indem die Funktion beliebige Iterables durchläuft; sie fragt das Objekt nach seiner Größe. Das ist nützlich, wenn das Objekt seine Elementanzahl bereits kennt, aber keine allgemeine Methode, um einen Datenstrom zu zählen. Gehe auch nicht davon aus, dass jeder Aufruf gleich schnell ist: Der Aufwand hängt von der Implementierung des jeweiligen Objekts ab.
Wie len() und __len__() zusammenhängen
Die eingebaute Funktion len(obj) verwendet Pythons Längenprotokoll. Eine Klasse nimmt üblicherweise daran teil, indem sie die spezielle Methode __len__() definiert. Diese gibt eine nicht negative Ganzzahl zurück, die die Anzahl der Elemente ihrer Instanz angibt. Im normalen Anwendungscode solltest du len(obj) aufrufen, statt obj.__len__() direkt aufzurufen. Die eingebaute Funktion ist die Standardschnittstelle, die auch mit eingebauten Typen funktioniert und Python seine übliche Suche nach speziellen Methoden ermöglicht.
Hier ist eine kleine eigene Klasse, die ihre Werte in einer Liste speichert:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
class CustomList:
def __init__(self, elements):
self.elements = elements
def __len__(self):
return len(self.elements)
my_custom_list = CustomList([1, 2, 3, 4, 5])
print(len(my_custom_list))
Die Klasse übernimmt die Zählung von der enthaltenen Liste; Aufrufer verwenden dafür die vertraute Schnittstelle len(). Eine eigene Implementierung sollte sicherstellen, dass die gemeldete Anzahl mit dem tatsächlichen Inhalt des Objekts übereinstimmt. Durch die Definition von __len__() werden nicht automatisch beliebige andere Objekte zählbar. Auch der Aufruf von len() verhindert nicht allgemein, dass Ausnahmen auftreten.
Objekte ohne Länge behandeln
Generatoren und viele andere Iteratoren liefern Werte beim Durchlaufen und speichern keine Gesamtanzahl. Der Aufruf von len() für eines dieser Objekte ohne feste Länge wird nicht unterstützt. Wenn du alle Werte zählen musst und den Iterator dabei verbrauchen kannst, zähle seine Elemente, indem du ihn durchläufst:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
generator = (number for number in range(5))
item_count = sum(1 for _ in generator)
print(item_count)
Bei diesem Vorgehen wird der Generator bis zum Ende durchlaufen; danach stehen seine Werte nicht mehr über diesen Generator zur Verfügung. Wenn du die Werte später noch brauchst, wandle sie zuerst mit list(generator) in eine Liste um und rufe dann len() für diese Liste auf. Beim Umwandeln bleiben die Werte im Arbeitsspeicher. Wähle daher für große oder unbegrenzte Datenströme einen passenden Ansatz, statt zu versuchen, vorab eine Gesamtzahl zu berechnen.
Die Längen mehrerer Objekte mit map() ermitteln
Um len() auf mehrere Objekte mit bekannter Länge anzuwenden, übergib die Funktion als Argument an map(). In Python 3 gibt map() einen Iterator zurück. Umschließe ihn daher mit list(), wenn du alle ermittelten Anzahlen zusammen anzeigen und behalten möchtest:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
objects = [[1, 2, 3], ("a", "b"), "Python"]
lengths = list(map(len, objects))
print(lengths)
Die resultierende Liste enthält für jedes Eingabeobjekt eine Anzahl, und zwar in derselben Reihenfolge. Jedes Objekt in objects muss len() unterstützen. Enthält die Sammlung einen Iterator ohne feste Länge, lassen sich nicht alle angeforderten Längen ermitteln. Wenn du jede Anzahl nur einmal verarbeiten musst, kannst du map(len, objects) direkt durchlaufen, ohne eine Liste anzulegen. Verwende die Listenvariante, wenn du die vollständige Sammlung der Anzahlen anzeigen, indizieren oder wiederverwenden möchtest.