Frage Was ist der Unterschied zwischen Listen und Tupeln?


Was ist der Unterschied?

Was sind die Vor- und Nachteile von Tupeln / Listen?


844
2018-03-09 15:41


Ursprung


Antworten:


Abgesehen davon, dass Tupel unveränderlich sind, gibt es auch eine semantische Unterscheidung, die ihre Verwendung leiten sollte. Tupel sind heterogene Datenstrukturen (d. H. Ihre Einträge haben unterschiedliche Bedeutungen), während Listen homogene Sequenzen sind. Tupel haben Struktur, Listen haben Ordnung. 

Durch diese Unterscheidung wird Code klarer und verständlicher.

Ein Beispiel wären Paare von Seiten- und Zeilennummern zu Referenzorten in einem Buch, z.

my_location = (42, 11)  # page number, line number

Sie können dies dann als Schlüssel in einem Wörterbuch verwenden, um Notizen zu Speicherorten zu speichern. Eine Liste auf der anderen Seite könnte verwendet werden, um mehrere Orte zu speichern. Natürlich möchte man möglicherweise Orte aus der Liste hinzufügen oder entfernen, daher ist es sinnvoll, dass Listen änderbar sind. Auf der anderen Seite macht es keinen Sinn, Elemente aus einem bestehenden Ort hinzuzufügen oder zu entfernen - daher sind Tupel unveränderlich.

Es kann Situationen geben, in denen Sie Elemente in einem vorhandenen Positionstupel ändern möchten, z. B. beim Durchlaufen der Zeilen einer Seite. Die Unveränderbarkeit von Tupeln zwingt Sie jedoch, für jeden neuen Wert ein neues Standorttupel zu erstellen. Dies erscheint auf den ersten Blick unbequem, aber die Verwendung unveränderlicher Daten wie dieser ist ein Eckpfeiler von Werttypen und funktionalen Programmiertechniken, die wesentliche Vorteile haben können.

Es gibt einige interessante Artikel zu diesem Thema, z.B. "Python Tupel sind nicht nur konstante Listen" oder "Tupel gegen Listen in Python verstehen". Die offizielle Python-Dokumentation erwähnt dies auch

"Tupel sind unveränderlich und enthalten normalerweise eine heterogene Sequenz ...".

In einer statisch typisierten Sprache wie Haskell Die Werte in einem Tupel haben im Allgemeinen unterschiedliche Typen und die Länge des Tupels muss festgelegt sein. In einer Liste haben alle Werte den gleichen Typ und die Länge ist nicht festgelegt. Der Unterschied ist also sehr offensichtlich.

Endlich gibt es das Namedtuple in Python, was sinnvoll ist, weil ein Tupel bereits eine Struktur haben soll. Dies unterstreicht die Idee, dass Tupel eine leichte Alternative zu Klassen und Instanzen darstellen.


881
2018-03-09 16:02



Unterschied zwischen Liste und Tupel

  1. Buchstäblich

    someTuple = (1,2)
    someList  = [1,2] 
    
  2. Größe

    a = tuple(range(1000))
    b = list(range(1000))
    
    a.__sizeof__() # 8024
    b.__sizeof__() # 9088
    

    Aufgrund der kleineren Größe eines Tupel-Vorgangs wird es ein bisschen schneller, aber nicht viel zu erwähnen, bis Sie eine riesige Anzahl von Elementen haben.

  3. Erlaubte Operationen

    b    = [1,2]   
    b[0] = 3       # [3, 2]
    
    a    = (1,2)
    a[0] = 3       # Error
    

    Das bedeutet auch, dass Sie ein Element nicht löschen oder ein Tupel nicht sortieren können. Sie können jedoch sowohl der Liste als auch dem Tupel ein neues Element hinzufügen, mit dem einzigen Unterschied, dass Sie die ID des Tupels ändern, indem Sie ein Element hinzufügen

    a     = (1,2)
    b     = [1,2]  
    
    id(a)          # 140230916716520
    id(b)          # 748527696
    
    a   += (3,)    # (1, 2, 3)
    b   += [3]     # [1, 2, 3]
    
    id(a)          # 140230916878160
    id(b)          # 748527696
    
  4. Verwendung

    Da eine Liste änderbar ist, kann sie nicht als Schlüssel in einem Wörterbuch verwendet werden, während ein Tupel verwendet werden kann.

    a    = (1,2)
    b    = [1,2] 
    
    c = {a: 1}     # OK
    c = {b: 1}     # Error
    

298
2017-09-19 11:07



Wenn Sie spazieren gehen, können Sie Ihre Koordinaten jederzeit in einem (x,y) Tupel.

Wenn Sie Ihre Reise aufzeichnen möchten, können Sie Ihren Standort alle paar Sekunden an eine Liste anhängen.

Aber du konntest es nicht umgekehrt tun.


176
2018-03-09 17:14



Der Hauptunterschied besteht darin, dass Tupel unveränderlich sind. Dies bedeutet, dass Sie die Werte in einem Tupel nicht mehr ändern können, nachdem Sie es erstellt haben.

Wenn Sie also die Werte ändern müssen, verwenden Sie eine Liste.

Vorteile für Tupel:

  1. Leichte Leistungsverbesserung.
  2. Da ein Tupel unveränderlich ist, kann es als Schlüssel in einem Wörterbuch verwendet werden.
  3. Wenn du es nicht ändern kannst, kann es auch niemand anderes tun, was bedeutet, dass du dich nicht um irgendwelche API-Funktionen kümmern musst usw., ohne dein Tupel zu ändern.

69
2018-03-09 15:42



Listen sind veränderbar; Tupel sind nicht.

Von docs.python.org/2/tutorial/datastructures.html 

Tupel sind unveränderlich und enthalten gewöhnlich eine heterogene Sequenz von   Elemente, auf die über das Entpacken zugegriffen wird (siehe weiter unten in diesem Abschnitt)   oder Indizierung (oder sogar im Fall von namedtuples durch Attribut). Listen   sind veränderlich, und ihre Elemente sind gewöhnlich homogen und sind   Zugriff durch Iterieren über die Liste.


30
2018-03-09 15:41



Listen sind für Schleifen, Tupel sind für Strukturen, d.h. "%s %s" %tuple.

Listen sind in der Regel homogen, Tupel sind meist heterogen.

Listen sind für variable Länge, Tupel sind für feste Länge.


18
2018-04-19 05:43



Es ist wurde erwähnt dass der Unterschied weitgehend semantisch ist: Die Leute erwarten, dass ein Tupel und eine Liste verschiedene Informationen repräsentieren. Aber das geht weiter als eine Richtlinie; Einige Bibliotheken verhalten sich tatsächlich anders, je nachdem, was sie passieren. Nimm zum Beispiel NumPy (kopiert von ein anderer Beitrag wo ich nach mehr Beispielen frage):

>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
       [3, 4, 5]])

Der Punkt ist, während NumPy möglicherweise nicht Teil der Standardbibliothek ist, ist es ein Haupt Python-Bibliothek und in NumPy Listen und Tupel sind völlig verschiedene Dinge.


17
2017-08-12 07:06