Antworten:
my_list = [1,2,3,4,5]
len(my_list)
# 5
Das gleiche gilt für Tupel:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Und Strings, die eigentlich nur Anordnungen von Zeichen sind:
my_string = 'hello world'
len(my_string)
# 11
Dies wurde absichtlich so gemacht, dass Listen, Tupel und andere Containertypen oder Iterables nicht alle explizit eine öffentliche .length()
Methode implementieren mussten. Stattdessen können Sie einfach len()
alles überprüfen, was die 'magische' __len__()
Methode implementiert .
Sicher, dies mag überflüssig erscheinen, aber Implementierungen zur Längenprüfung können selbst innerhalb derselben Sprache erheblich variieren. Es ist nicht ungewöhnlich, dass ein Sammlungstyp eine .length()
Methode verwendet, während ein anderer Typ eine .length
Eigenschaft verwendet, während ein anderer verwendet .count()
. Ein Schlüsselwort auf Sprachebene vereinheitlicht den Einstiegspunkt für alle diese Typen. Selbst Objekte, die Sie möglicherweise nicht als Listen von Elementen betrachten, können dennoch auf ihre Länge überprüft werden. Dies umfasst Zeichenfolgen, Warteschlangen, Bäume usw.
Die funktionale Natur von len()
eignet sich auch gut für funktionale Programmierstile.
lengths = map(len, list_of_containers)
Die Art und Weise, wie Sie eine Länge von allem nehmen, für das dies sinnvoll ist (eine Liste, ein Wörterbuch, ein Tupel, eine Zeichenfolge, ...), besteht darin, es aufzurufen len
.
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
Der Grund für die „seltsame“ Syntax ist , dass intern Python übersetzt len(object)
in object.__len__()
. Dies gilt für jedes Objekt. Wenn Sie also eine Klasse definieren und es sinnvoll ist, dass sie eine Länge hat, definieren Sie einfach eine __len__()
Methode, und dann können Sie len
diese Instanzen aufrufen .
Python verwendet die Ententypisierung : Es ist ihm egal, was ein Objekt ist , solange es über die entsprechende Schnittstelle für die jeweilige Situation verfügt. Wenn Sie die integrierte Funktion len () für ein Objekt aufrufen, rufen Sie tatsächlich dessen interne __len__- Methode auf. Ein benutzerdefiniertes Objekt kann diese Schnittstelle implementieren und len () gibt die Antwort zurück, auch wenn das Objekt konzeptionell keine Sequenz ist.
Eine vollständige Liste der Schnittstellen finden Sie hier: http://docs.python.org/reference/datamodel.html#basic-customization
Der bevorzugte Weg, um die Länge eines Python-Objekts zu ermitteln, besteht darin, es als Argument an die len
Funktion zu übergeben. Intern versucht Python dann, die spezielle __len__
Methode des übergebenen Objekts aufzurufen .
Verwenden Sie einfach len(arr)
:
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
Sie können len(arr)
wie in den vorherigen Antworten vorgeschlagen verwenden, um die Länge des Arrays zu ermitteln. Wenn Sie die Abmessungen eines 2D-Arrays möchten, können Sie die arr.shape
Höhe und Breite der Rückgabe verwenden
len(list_name)
Die Funktion verwendet die Liste als Parameter und ruft die __len__()
Funktion der Liste auf .
Python schlägt vor, dass Benutzer len()
anstelle von __len__()
Konsistenz verwenden, genau wie andere Leute sagten. Es gibt jedoch noch einige andere Vorteile:
Für einige , wie in gebauten Typen list
, str
, bytearray
und so weiter, die Cython Umsetzung len()
erfolgt eine Verknüpfung. Es gibt direkt die ob_size
in einer C-Struktur zurück, die schneller als das Aufrufen ist __len__()
.
Wenn Sie an solchen Details interessiert sind, können Sie das Buch "Fluent Python" von Luciano Ramalho lesen. Es enthält viele interessante Details, die Ihnen helfen können, Python besser zu verstehen.