Wie bekomme ich die Anzahl der Elemente in einer Liste?
Folgendes:
items = []
items.append("apple")
items.append("orange")
items.append("banana")
# FAKE METHOD:
items.amount() # Should return 3
Wie bekomme ich die Anzahl der Elemente in der Liste items
?
- Sie sind offensichtlich Fragen, für die Anzahl der Elemente in der Liste. Wenn ein Suchender hier kommt der Suche nach der Größe des Objekts im Speicher, das ist die eigentliche Frage & Antworten, die Sie suchen: Wie bestimme ich die Größe eines Objekts in Python?
InformationsquelleAutor y2k | 2009-11-11
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
len()
Funktion kann verwendet werden, mit mehreren verschiedenen Typen, die in Python die beiden built-in-Typen und-Bibliothek Arten. Zum Beispiel:Offizielle 2.x die Dokumentation ist hier:
len()
Offizielle 3.x die Dokumentation ist hier:
len()
Zu finden, die Größe einer Liste, verwenden Sie die eingebaute Funktion,
len
:Und jetzt:
zurück 3.
Erklärung
Alles in Python ist ein Objekt, einschließlich Listen. Alle Objekte haben einen header von einer Art in die C-Implementierung.
Listen und andere ähnliche builtin-Objekte mit einer "Größe" in Python, insbesondere, haben ein Attribut namens
ob_size
, wo die Zahl der Elemente im Objekt zwischengespeichert. So prüfen Sie die Anzahl der Objekte in einer Liste ist sehr schnell.Aber wenn Sie überprüft haben, wenn die Liste, die Größe null ist oder nicht, nicht mit
len
- stattdessen legen Sie die Liste in einem booleschen Kontext - es behandelt wie False, wenn Sie leer ist, ansonsten True.Aus der docs
len(s)
len
implementiert, mit__len__
vom Datenmodell docs:object.__len__(self)
Und wir können auch sehen, dass
__len__
ist eine Methode der Listen:zurück 3.
Builtin-Typen, die Sie bekommen können, die
len
(Länge) vonUnd in der Tat sehen wir, können wir erhalten diese Informationen für alle beschriebenen Arten:
Nicht verwenden
len
zu testen, für eine leere oder nichtleere ListeZum testen für eine bestimmte Länge, natürlich, einfach-test für die Gleichheit:
Aber es gibt einen Sonderfall für die Prüfung für eine null-Länge-Liste oder Umgekehrt. In diesem Fall nicht ein test für die Gleichheit.
Auch nicht tun:
Stattdessen einfach tun:
oder
Ich erklären Sie, warum Sie hier aber kurz
if items
oderif not items
ist sowohl leichter lesbar und performant.Während dies möglicherweise nicht nützlich sein, aufgrund der Tatsache, dass es hätte viel mehr Sinn als "out of the box" - Funktionalität, ein ziemlich einfaches hack wäre der Aufbau einer Klasse mit einem
length
Eigenschaft:Können Sie es verwenden, etwa so:
Im wesentlichen, es ist genau identisch zu einem list-Objekt, mit dem zusätzlichen Vorteil, dass ein OOP-freundliche
length
Eigenschaft.Wie immer kann Ihre Laufleistung variieren.
length = property(len)
und überspringen Sie die Zeile wrapper-Funktion und bewahren Sie die Dokumentation / Introspektion derlen
mit Ihrem Eigentum.Neben
len
Sie können auch- operator.length_hint
(erfordert Python 3.4+). Für eine normalelist
beide sind gleichwertig, aberlength_hint
macht es möglich, die Länge einer Liste-iterator, was nützlich sein kann in bestimmten Situationen:Aber
length_hint
ist per definition nur ein "Hinweis", so dass die meisten der Zeitlen
ist besser.Habe ich gesehen, dass mehrere Antworten, die darauf hindeutet, Zugriff auf
__len__
. Dies ist alles in Ordnung beim Umgang mit built-in-Klassen, wielist
, aber es könnte zu Problemen mit benutzerdefinierten Klassen, dalen
(undlength_hint
) implementieren Sie einige Sicherheits-checks. Zum Beispiel, beide erlauben keine negativen Längen oder Längen, die einen bestimmten Wert überschreiten (diesys.maxsize
Wert). So ist es immer sicherer, zu verwenden, dielen
- Funktion anstelle der__len__
Methode!Deine Frage zu beantworten, wie die Beispiele auch vorher gegeben:
__foo__
: dies ist nur eine Konvention, eine Möglichkeit für das Python-system zu verwenden, Namen, die keine Konflikte mit den Benutzer-Namen. 2._foo
: dies ist nur eine Konvention, eine Möglichkeit für den Programmierer, um anzuzeigen, dass die variable ist privat (was auch immer das bedeutet in Python). 3.__foo
: dieses echte Bedeutung hat: der interpreter ersetzt diesen Namen mit_classname__foo
als ein Weg, um sicherzustellen, dass die Namen überschneiden sich nicht mit ähnlichen Namen in einer anderen Klasse. * Keine andere form unterstreicht Bedeutung in der Python-Welt. * Es gibt keinen Unterschied zwischen Klassen, Variablen, global, etc, die in diesen Konventionen.Und der Vollständigkeit halber, ist es möglich, ohne mithilfe der
len()
- Funktion (würde ich nicht dulden diese als eine gute Möglichkeit, das PROGRAMM NICHT WIE DIESER IN PYTHON):(Der Doppelpunkt in
list[:]
ist implizit und wird daher ebenfalls optional.)Die Lektion hier für neue Programmierer ist: Sie können nicht die Anzahl der Elemente in einer Liste ohne zu zählen die Sie an einem gewissen Punkt. Rechnerisch ist es besser, um zu verfolgen die Anzahl der Elemente, wie Sie Sie hinzufügen. Sehen Naftuli Kay ' s Antwort.
for item in list[:]:
? Warum nichtfor item in list:
? Auch verwende ich+= 1
zu erhöhen.In Bezug auf, wie
len()
tatsächlich funktioniert, das ist die C-implementation:Py_ssize_t
ist die maximale Länge, die das Objekt haben kann.PyObject_Size()
ist eine Funktion, die liefert die Größe eines Objekts. Wenn Sie nicht bestimmen die Größe eines Objekts, wird -1 zurückgegeben. In diesem Fall, wird dieser code-block wird ausgeführt:Und eine Ausnahme wird ausgelöst, als ein Ergebnis. Anderenfalls wird dieser code-block wird ausgeführt:
res
was ist einC
ganze Zahl ist, wird umgewandelt in ein python -long
und zurückgegeben. Alle python-Ganzzahlen gespeichert sind, alslongs
seit Python 3.