Frage Wie bekomme ich die Anzahl der Elemente in einer Liste in Python?


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?


1530
2017-11-11 00:30


Ursprung


Antworten:


Das len() Funktion kann mit vielen Typen verwendet werden Python - Sowohl integrierte Typen als auch Bibliothekstypen.

>>> len([1,2,3])
3

2125
2017-11-11 00:33



Wie bekomme ich die Größe einer Liste?

Um die Größe einer Liste zu finden, benutzen Sie die eingebaute Funktion, len:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

Und nun:

len(items)

gibt 3 zurück.

Erläuterung

Alles in Python ist ein Objekt, einschließlich Listen. Alle Objekte haben einen Header in der C-Implementierung.

Listen und andere ähnliche eingebaute Objekte mit einer "Größe" in Python haben insbesondere ein Attribut namens ob_size, wo die Anzahl der Elemente im Objekt zwischengespeichert wird. Das Überprüfen der Anzahl von Objekten in einer Liste ist daher sehr schnell.

Aber wenn Sie überprüfen, ob die Listengröße Null ist oder nicht, verwenden Sie nicht len - stattdessen, setze die Liste in einen booleschen Kontext - sie wird als False behandelt, wenn sie leer ist, andernfalls als True.

Von dem Dokumente

len(s)

Gibt die Länge (die Anzahl der Elemente) eines Objekts zurück. Das Argument kann eine Sequenz (z. B. eine Zeichenfolge, Bytes, Tupel, Liste oder Bereich) oder sein   eine Sammlung (z. B. ein Wörterbuch, ein Set oder ein eingefrorenes Set).

len ist implementiert mit __len__, aus dem Datenmodell Dokumente:

object.__len__(self)

Wird aufgerufen, um die integrierte Funktion zu implementieren len(). Sollte die Länge des Objekts zurückgeben, eine Ganzzahl> = 0. Auch ein Objekt, das nicht   definiere a __nonzero__() [in Python 2 oder __bool__() in Python 3] Methode und who __len__() Methode gibt Null zurück   wird in einem booleschen Kontext als falsch betrachtet.

Und das können wir auch sehen __len__ ist eine Methode von Listen:

items.__len__()

gibt 3 zurück.

Vordefinierte Typen können Sie erhalten len (Länge von

Und tatsächlich sehen wir, dass wir diese Informationen für alle beschriebenen Typen erhalten können:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

Verwende nicht len um nach einer leeren oder nicht leeren Liste zu suchen

Um auf eine bestimmte Länge zu testen, testen Sie einfach auf Gleichheit:

if len(items) == required_length:
    ...

Aber es gibt einen speziellen Fall für das Testen für eine Nulllängenliste oder die Umkehrung. Testen Sie in diesem Fall nicht auf Gleichheit.

Mach auch nicht:

if len(items): 
    ...

Stattdessen tun Sie einfach:

if items:     # Then we have some items, not empty!
    ...

oder

if not items: # Then we have an empty list!
    ...

ich erkläre warum hier aber kurz gesagt, if items oder if not items ist sowohl lesbarer als auch leistungsfähiger.


136
2017-11-25 21:51



Während dies nicht nützlich sein könnte, da es viel sinnvoller wäre als "out of the box" Funktionalität, wäre ein ziemlich einfacher Hack, eine Klasse mit einem length Eigentum:

class slist(list):
    @property
    def length(self):
        return len(self)

Sie können es so verwenden:

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Im Wesentlichen ist es genau identisch mit einem Listenobjekt, mit dem zusätzlichen Vorteil, eine OOP-freundlich zu haben length Eigentum.

Wie immer kann Ihre Laufleistung variieren.


64
2018-04-19 21:51



Außerdem len Sie können auch verwenden operator.length_hint (benötigt Python 3.4+). Für normal list beide sind gleichwertig aber length_hint macht es möglich, die Länge eines Listen-Iterators zu erhalten, was unter bestimmten Umständen nützlich sein könnte:

>>> from operator import length_hint
>>> l = ["apple", "orange", "banana"]
>>> len(l)
3
>>> length_hint(l)
3

>>> list_iterator = iter(l)
>>> len(list_iterator)
TypeError: object of type 'list_iterator' has no len()
>>> length_hint(list_iterator)
3

Aber length_hint ist per definitionem nur ein "Hinweis", also meistens len ist besser.

Ich habe mehrere Antworten gesehen, die auf einen Zugriff hindeuten __len__. Dies ist in Ordnung, wenn es um integrierte Klassen wie list aber es könnte zu Problemen mit benutzerdefinierten Klassen führen, weil len (und length_hint) einige Sicherheitskontrollen durchführen. Zum Beispiel erlauben beide keine negativen Längen oder Längen, die einen bestimmten Wert übersteigen (die sys.maxsize Wert). Es ist also immer sicherer das zu benutzen len Funktion anstelle der __len__ Methode!


9
2018-04-07 19:03



Beantworten Sie Ihre Frage als die zuvor gegebenen Beispiele:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

print items.__len__()

6
2017-07-14 08:36



Und aus Gründen der Vollständigkeit (eine für das Team mit den Downvotes) ist es möglich, ohne die len() Funktion (ich würde dies nicht als eine gute Option dulden):

def count(list):
  item_count = 0
  for item in list[:]:
    item_count = item_count + 1
  return item_count

count([1,2,3,4,5])

(der Doppelpunkt in list[:] ist implizit, also auch optional)


-1
2017-12-06 18:14