Wie erhalte ich die Anzahl der Elemente in einer Liste (Länge einer Liste) in Python?

Lesezeit: 8 Minuten

Benutzeravatar von y2k
y2k

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

items = ["apple", "orange", "banana"]

# There are 3 items.

  • Sie fragen offensichtlich nach der Anzahl der Elemente in der Liste. Wenn ein Suchender hierher kommt und nach der Größe des Objekts im Speicher sucht, ist dies die eigentliche Frage und Antwort, nach der er sucht: Wie bestimme ich die Größe eines Objekts in Python?

    – Russland muss Putin entfernen

    31. Oktober 2016 um 14:37 Uhr


  • @RussiaMustRemovePutin Der Titel dieser Frage wurde nachträglich bearbeitet, daher scheint es unwahrscheinlich, dass Personen mit dieser Frage so wie sie sind hier landen.

    – Karl Knechtel

    15. Oktober um 6:35 Uhr

Benutzeravatar von gnud
Gnud

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

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

Russland muss Putins Benutzer-Avatar entfernen
Russland muss Putin entfernen

Wie bekomme ich die Länge einer Liste?

Verwenden Sie die eingebaute Funktion, um die Anzahl der Elemente in einer Liste zu ermitteln len:

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

Und nun:

len(items)

Rückkehr 3.

Erläuterung

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

Insbesondere Listen und andere ähnliche eingebaute Objekte mit einer “Größe” in Python haben ein Attribut namens ob_size, wo die Anzahl der Elemente im Objekt zwischengespeichert wird. Die Überprüfung der Anzahl der Objekte in einer Liste ist also sehr schnell.

Aber wenn Sie überprüfen, ob die Listengröße Null ist oder nicht, verwenden Sie es nicht len – Stellen Sie die Liste stattdessen in einen booleschen Kontext – sie wird als “False” behandelt, wenn sie leer ist, und als “True”, wenn sie nicht leer ist.

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, ein Tupel, eine Liste oder ein Bereich) oder eine Sammlung (z. B. ein Wörterbuch, eine Menge oder eine eingefrorene Menge) sein.

len wird mit umgesetzt __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. Außerdem ein Objekt, das a nicht definiert __nonzero__() [in Python 2 or __bool__() in Python 3] Methode und wessen __len__() Methode Null zurückgibt, wird in einem booleschen Kontext als falsch angesehen.

Und das können wir auch sehen __len__ ist eine Listenmethode:

items.__len__()

Rückkehr 3.

Eingebaute Typen, die Sie bekommen können 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, 
                                            range, dict, set, frozenset))
True

Verwende nicht len um auf eine leere oder nicht leere Liste zu testen

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

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

Aber es gibt einen Sonderfall für das Testen auf eine Liste der Länge Null oder das Gegenteil. Testen Sie in diesem Fall nicht auf Gleichheit.

Auch nicht tun:

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 hier warum, aber kurz, if items oder if not items ist sowohl lesbarer als auch performanter.

Obwohl dies möglicherweise nicht nützlich ist, da es als “out of the box” -Funktionalität viel sinnvoller wäre, wäre es ein ziemlich einfacher Hack, eine Klasse mit a zu erstellen length Eigentum:

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

Sie können es wie folgt 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, dass es OOP-freundlich ist length Eigentum.

Wie immer kann Ihr Kilometerstand variieren.

  • Nur damit du es weißt, du kannst es einfach tun length = property(len) und überspringen Sie die One-Line-Wrapper-Funktion und behalten Sie die Dokumentation / Selbstprüfung bei len mit Ihrem Eigentum.

    – Tadhg McDonald-Jensen

    13. Juni 2016 um 2:17 Uhr

Benutzeravatar von MSeifert
MSeifert

Neben len kannst du auch verwenden operator.length_hint (erfordert Python 3.4+). Für einen normalen list beide sind gleichwertig, aber length_hint ermöglicht es, 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 Definition nur ein “Hinweis”, also meistens len ist besser.

Ich habe mehrere Antworten gesehen, die darauf hindeuten, darauf zuzugreifen __len__. Dies ist in Ordnung, wenn es um eingebaute Klassen geht, wie z listaber es könnte zu Problemen mit benutzerdefinierten Klassen führen, weil len (und length_hint) Implementieren Sie einige Sicherheitskontrollen. Beide erlauben beispielsweise keine negativen Längen oder Längen, die einen bestimmten Wert überschreiten (die sys.maxsize Wert). Es ist also immer sicherer, die zu verwenden len Funktion statt der __len__ Methode!

Benutzeravatar von Jonathan Komar
Jonathan Komar

Und der Vollständigkeit halber (hauptsächlich pädagogisch) ist es möglich, ohne die zu verwenden len() Funktion. Ich würde dies nicht als gute Option dulden PROGRAMMIEREN SIE SO NICHT IN PYTHONaber es dient dem Zweck, Algorithmen zu lernen.

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

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

(Die Indexoperation mit Doppelpunkt in list[:] ist implizit und daher auch optional.)

Die Lektion hier für neue Programmierer ist: Sie können die Anzahl der Elemente in einer Liste nicht erhalten, ohne sie irgendwann zu zählen. Die Frage lautet: Wann ist ein guter Zeitpunkt, um sie zu zählen? Zum Beispiel Hochleistungscode wie der Connect-Systemaufruf für Sockets (in C geschrieben) connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);, berechnet nicht die Länge der Elemente (wobei diese Verantwortung dem aufrufenden Code übertragen wird). Beachten Sie, dass die Länge der Adresse weitergegeben wird, um den Schritt zu sparen, zuerst die Länge zu zählen? Eine weitere Option: Rechnerisch könnte es sinnvoll sein, die Anzahl der Elemente zu verfolgen, während Sie sie innerhalb des Objekts hinzufügen, das Sie übergeben. Beachten Sie, dass dies mehr Speicherplatz beansprucht. Siehe Antwort von Naftuli Kay.

Beispiel für das Nachverfolgen der Länge, um die Leistung zu verbessern und gleichzeitig mehr Speicherplatz zu beanspruchen. Beachten Sie, dass ich die Funktion len () nie verwende, da die Länge verfolgt wird:

class MyList(object):
    def __init__(self):
        self._data = []
        self.length = 0 # length tracker that takes up memory but makes length op O(1) time
        

        # the implicit iterator in a list class
    def __iter__(self):
        for elem in self._data:
            yield elem
            
    def add(self, elem):
        self._data.append(elem)
        self.length += 1
            
    def remove(self, elem):
        self._data.remove(elem)
        self.length -= 1
            
mylist = MyList()
mylist.add(1)
mylist.add(2)
mylist.add(3)
print(mylist.length) # 3
mylist.remove(3)
print(mylist.length) # 2

  • Warum for item in list[:]:? Warum nicht for item in list:? Außerdem würde ich verwenden += 1 zu inkrementieren.

    – Oma tut weh

    30. April 2019 um 19:13 Uhr

  • @GrannyAching Ich habe ausdrücklich den optionalen Doppelpunkt (Bereichsbezeichner) erwähnt. Ich habe den Bereichsspezifizierer zu Bildungszwecken dort gelassen – es ist von Vorteil zu wissen, dass er impliziert ist. Ein Listentyp [] wird auch abgeleitet, wie Sie vorschlagen – äquivalent zu meinem Code. Der Inkrementoperator entspricht auch dem Hinzufügen von 1 zu einer vorhandenen Variablen, ist jedoch in allen Fällen kürzer. Ich würde also zustimmen, dass es verwendet werden sollte, wenn dies Ihre Argumentation ist. Dieser Code sollte ohnehin nirgendwo in Produktion gehen (außer beim Erlernen des Programmierens).

    – Jonathan Komar

    2. Mai 2019 um 6:29 Uhr


  • Wenn wir in den Kaninchenbau von “mach das nicht, aber es macht Spaß” gehen, biete ich an length = max(enumerate(list))[0] + 1.

    – Kirk Strauser

    8. Dezember 2020 um 21:56 Uhr

  • @KirkStrauser Haha, ich habe über diese clevere Vermeidung gelacht len()

    – Jonathan Komar

    15. Mai 2021 um 19:51 Uhr

Benutzeravatar von Peter Mortensen
Peter Mortensen

Beantwortung Ihrer Frage wie die zuvor genannten Beispiele:

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

print items.__len__()

  • Warum for item in list[:]:? Warum nicht for item in list:? Außerdem würde ich verwenden += 1 zu inkrementieren.

    – Oma tut weh

    30. April 2019 um 19:13 Uhr

  • @GrannyAching Ich habe ausdrücklich den optionalen Doppelpunkt (Bereichsbezeichner) erwähnt. Ich habe den Bereichsspezifizierer zu Bildungszwecken dort gelassen – es ist von Vorteil zu wissen, dass er impliziert ist. Ein Listentyp [] wird auch abgeleitet, wie Sie vorschlagen – äquivalent zu meinem Code. Der Inkrementoperator entspricht auch dem Hinzufügen von 1 zu einer vorhandenen Variablen, ist jedoch in allen Fällen kürzer. Ich würde also zustimmen, dass es verwendet werden sollte, wenn dies Ihre Argumentation ist. Dieser Code sollte ohnehin nirgendwo in Produktion gehen (außer beim Erlernen des Programmierens).

    – Jonathan Komar

    2. Mai 2019 um 6:29 Uhr


  • Wenn wir in den Kaninchenbau von “mach das nicht, aber es macht Spaß” gehen, biete ich an length = max(enumerate(list))[0] + 1.

    – Kirk Strauser

    8. Dezember 2020 um 21:56 Uhr

  • @KirkStrauser Haha, ich habe über diese clevere Vermeidung gelacht len()

    – Jonathan Komar

    15. Mai 2021 um 19:51 Uhr

Du kannst den … benutzen len() Funktion zum Ermitteln der Länge eines Iterables in Python.

my_list = [1, 2, 3, 4, 5]
print(len(my_list))  # OUTPUT: 5

Das len() Funktion funktioniert auch mit Strings:

my_string = "hello"
print(len(my_string))  # OUTPUT: 5

Also zum Schluss, len() funktioniert mit jeder Sequenz oder Sammlung (oder Objekten jeder Größe, die definieren __len__).

1433050cookie-checkWie erhalte ich die Anzahl der Elemente in einer Liste (Länge einer Liste) in Python?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy