it-swarm.com.de

Wie erhalte ich die Anzahl der Elemente in einer Liste?

Folgendes berücksichtigen:

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

# FAKE METHOD:
items.amount()  # Should return 3

Wie erhalte ich die Anzahl der Elemente in der Liste items?

1807
y2k

Die Funktion len() kann mit verschiedenen Typen in Python verwendet werden - sowohl mit integrierten Typen als auch mit Bibliothekstypen. Zum Beispiel:

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

Die offizielle 2.x-Dokumentation finden Sie hier: len()
Offizielle 3.x Dokumentation ist hier: len()

2508
gnud

Wie bekomme ich die Größe einer Liste?

Verwenden Sie die integrierte Funktion len, um die Größe einer Liste zu ermitteln:

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 in der C-Implementierung eine Art Header.

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

Wenn Sie jedoch prüfen, ob die Listengröße Null ist oder nicht, verwenden Sie nicht len. Stattdessen wird die Liste mit in einen booleschen Kontext gestellt. Andernfalls wird sie als Falsch behandelt, wenn leer, andernfalls als Wahr .

Aus den Dokumenten

len(s)

Gibt die Länge (die Anzahl der Elemente) eines Objekts zurück. Das Argument kann eine Sequenz (z. B. ein String, Bytes, Tupel, eine Liste oder ein Bereich) oder eine Sammlung (z. B. ein Dictionary, eine Menge oder eine eingefrorene Menge) sein.

len wird mit __len__ aus dem Datenmodell docs implementiert:

object.__len__(self)

Wird aufgerufen, um die integrierte Funktion len() zu implementieren. Soll die Länge des Objekts zurückgeben, eine Ganzzahl> = 0. Außerdem ein Objekt, das keine __nonzero__() [in Python 2 oder __bool__() in Python 3] -Methode definiert und dessen Die Methode __len__(), die Null zurückgibt, wird in einem Booleschen Kontext als falsch betrachtet.

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

items.__len__()

gibt 3 zurück.

Eingebaute Typen können Sie die 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

Verwenden Sie len nicht, um auf eine leere oder nicht leere Liste zu testen

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

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

Es gibt jedoch einen speziellen Fall für das Testen einer Liste mit der Länge Null oder umgekehrt. Testen Sie in diesem Fall nicht die Gleichheit.

Tun Sie auch nicht:

if len(items): 
    ...

Tun Sie stattdessen einfach Folgendes:

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 sowohl lesbarer als auch performanter ist.

214
Aaron Hall

Obwohl dies aufgrund der Tatsache, dass es viel sinnvoller wäre, "out of the box" -Funktionalität zu sein, möglicherweise nicht sinnvoll ist, besteht ein ziemlich einfacher Hack darin, eine Klasse mit einer length -Eigenschaft zu erstellen:

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

Du kannst es so benutzen:

>>> 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, dass es eine OOP-freundliche length -Eigenschaft besitzt.

Wie immer kann Ihr Kilometerstand variieren.

72
Naftuli Kay

Neben len können Sie auch operator.length_hint verwenden (erfordert Python 3.4+). Für einen normalen list sind beide gleichwertig, aber _length_hint_ ermöglicht es, die Länge eines Listeniterators abzurufen, was unter bestimmten Umständen nützlich sein kann:

_>>> 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 Definition nur ein "Hinweis", daher ist len die meiste Zeit besser.

Ich habe mehrere Antworten gesehen, die darauf hindeuten, auf ___len___ zuzugreifen. Dies ist in Ordnung, wenn es sich um integrierte Klassen wie list handelt, kann jedoch zu Problemen mit benutzerdefinierten Klassen führen, da len (und _length_hint_) einige Sicherheitsprüfungen implementieren. Beispielsweise erlauben beide keine negativen Längen oder Längen, die einen bestimmten Wert überschreiten (den Wert _sys.maxsize_). Es ist also immer sicherer, die Funktion len anstelle der Methode ___len___ zu verwenden!

15
MSeifert

Und der Vollständigkeit halber ist es möglich, ohne die Funktion len() zu verwenden (ich würde dies nicht als gute Option dulden. PROGRAMMIEREN SIE NICHT WIE DIESES IN PYTHON):

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

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

(Der Doppelpunkt in list[:] ist implizit und daher auch optional.)

Die Lektion für neue Programmierer lautet: Sie können die Anzahl der Elemente in einer Liste nicht ermitteln, ohne sie irgendwann zu zählen. Aus rechnerischer Sicht ist es besser, die Anzahl der Elemente zu verfolgen, wenn Sie sie hinzufügen. Siehe die Antwort von Naftuli Kay.

6
Jonathan Komar

Beantwortung Ihrer Frage wie in den zuvor gegebenen Beispielen:

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

print items.__len__()
6
Shai Alon