Python:was ist der Unterschied zwischen (1,2,3) und [1,2,3], und Wann sollte ich jedes?

StackOverflow https://stackoverflow.com/questions/1983

  •  08-06-2019
  •  | 
  •  

Frage

In vielen Orten, (1,2,3) (ein Tupel) und [1,2,3] (einer Liste) können Synonym verwendet werden.

Wann sollte ich das eine oder andere, und warum?

War es hilfreich?

Lösung

Aus der Python-FAQ:

Listen und Tupel, während sich in vieler Hinsicht ähnlich, sind in der Regel grundverschieden.Tupel angesehen werden kann, ähnlich wie Pascal Aufzeichnungen oder C-Strukturen;Sie sind kleine Sammlungen von zugehörigen Daten, die von verschiedenen Arten, die als Gruppe bearbeitet.Zum Beispiel, ein Kartesisches Koordinatensystem ist, angemessen vertreten als ein Tupel von zwei oder drei zahlen.

Listen, auf der anderen Seite, sind mehr wie arrays in anderen Sprachen.Sie neigen dazu, zu halten eine unterschiedliche Anzahl von Objekten, die alle den gleichen Typ und betrieben werden, auf ein-by-one.

Generell durch die Konvention würden Sie nicht wählen Sie eine Liste oder ein Tupel nur auf seine (un)Veränderlichkeit.Wählen Sie ein Tupel für kleine Sammlungen von völlig verschiedene Stücke von Daten, bei dem eine volle-geblasen Klasse wäre auch im Schwergewicht, und eine Liste für Sammlungen jeder angemessenen Größe, wo Sie eine homogene Gruppe von Daten.

Andere Tipps

Die Liste [1,2,3] Sie ist dynamisch und flexibel, aber diese Flexibilität kommt bei einer Geschwindigkeit Kosten.

Das Tupel (1,2,3) ist Feste (unveränderliche) und damit schneller.

Tupel sind eine schnelle\flexiblen Art und Weise zu erstellen composite Daten-Typen.Listen sind Container für, gut, Listen von Objekten.

Zum Beispiel, würden Sie eine Liste verwenden, zu speichern Sie eine Liste von student details in einer Klasse.

Jeder student detail in dieser Liste kann ein 3-Tupel mit Ihre roll-Nummer, name und test-Ergebnis.

`[(1,'Mark',86),(2,'John',34)...]`

Auch, weil Tupel sind unveränderlich, Sie kann verwendet werden als Schlüssel in einem Wörterbuch.

Der Begriff Tupel sind sehr ausdrucksstark:

  • Pragmatisch, Sie sind toll zum packen und entpacken von Werten (x,y=coord).

  • In Kombination mit dictionaries (hash-Tabellen), Sie ermöglichen Formen der Zuordnung sonst mit vielen Ebenen des Verbandes.Betrachten Sie zum Beispiel die Kennzeichnung, dass (x,y) gefunden wurde.

    // PHP
    if (!isset($found[$x])) {
        $found[$x] = Array();
        $found[$x][$y] = true;
    } else if (!isset($found[$x][$y])) {
        $found[$x][$y] = true;
    }
    
    # Python
    found[(x,y)] = True # parens added for clarity
    
  • Listen sollten verwendet werden, mit der Erwartung von Operationen auf seinen Inhalt (daher die verschiedenen Erwähnungen der Unveränderbarkeit).Ein wollen pop, push, splice, slice, search, legen vor, legen nach, usw. mit einer Liste.

  • - Tupeln, sollte eine low-level-Darstellung eines Objekts, wo einfache Vergleiche oder Operationen, wie der Extraktion des n ' th element oder n Elemente in einer vorhersagbaren Weise, wie die Koordinaten Beispiel oben.

  • Schließlich Listen sind nicht hashable, so dass die Art der Zuordnung erfolgt mit dictionaries (hash-Tabellen in Perl, assoziative arrays in PHP) getan werden muss, mit Tupeln.

    Hier ist ein einfaches Beispiel für Tupel und Wörterbücher, endlich gemeinsam:

    """
    couple is a tuple of two people
    doesLike is a dictionary mapping couples to True or False
    """
    couple = "john", "jane"
    doesLike = dict()
    doesLike[couple] = True
    doesLike["jane", "john"] = False # unrequited love :'(
    

[1, 2, 3] ist eine Liste, in der man kann hinzufügen oder löschen von Elementen.
(1, 2, 3) ist ein Tupel, in dem einmal definiert, änderung können nicht gemacht werden.

Immer, wenn ich übergeben zu müssen, in der eine Sammlung von Elementen, um eine Funktion, wenn ich möchten die Funktion nicht ändern, werden die Werte übergeben, ich nutze Tupel.

Sonst, wenn ich will, um die Funktion zu ändern, die Werte, die ich verwenden Liste.

Immer wenn Sie mit externen Bibliotheken und übergeben zu müssen, in eine Liste von Werten an eine Funktion und sind nicht sicher über die Integrität der Daten, verwenden Sie ein Tupel.

Wie andere erwähnt haben, Listen und Tupel sind sowohl die Container, die verwendet werden kann zum speichern von python-Objekten.Listen sind erweiterbar und Ihre Inhalte ändern können, indem Zuordnung, auf der anderen Seite Tupel sind unveränderlich.

Auch Listen können nicht verwendet werden als Schlüssel in einem Wörterbuch in der Erwägung, dass Tupel können.

öffnen Sie eine Konsole und führen Sie python.Versuchen Sie dies:

  >>> list = [1, 2, 3]     
  >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
     '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Wie Sie sehen können, den letzten in der letzten Zeile der Liste haben die folgenden Methoden:'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'

Versuchen Sie nun das gleiche für Tupel:

>>> tuple = (1, 2, 3)
>>> dir(tuple)
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

Nur 'count' und 'index' Liste von Methoden, die hier angezeigt werden.

Dies ist, da Tupel unveränderlich sind und Sie nicht unterstützen, Sie alle änderungen.Stattdessen sind Sie einfacher und schneller in der internen Umsetzung.

  • Ein Tupel darstellen könnten ein Schlüssel im Wörterbuch, weil es unveränderlich.
  • Die Listen verwenden, wenn Sie eine Sammlung von Daten, die sich nicht brauchen-random access.

Wenn Sie eine Lösung finden, die funktioniert mit Tupeln, die Sie verwenden, als es die Kräfte der Unveränderlichkeit, welche Art von Laufwerken Sie unten einen mehr funktionale Pfad.Sie fast nie bereuen gehen in der Funktions - /unveränderlich Weg.

[1,2,3] ist eine Liste.

(1,2,3) ist ein Tupel und unveränderlich.

(1,2,3) und [1,2,3] austauschbar verwendet werden können in seltenen Umständen.

So (1,2,3) ist ein Tupel und unveränderlich ist.Alle änderungen, die Sie vornehmen möchten, müssen Sie überschreiben das Objekt.

[1,2,3] ist eine Liste und Elemente angefügt werden können und entfernt werden.

Liste hat mehr Funktionen als ein Tupel.

(1,2,3) ist ein Tupel, während [1,2,3] ist eine Liste.Ein Tupel ist ein unveränderliches Objekt, während die Liste ist veränderlich.

(1,2,3) ist ein Tupel und [1,2,3] ist eine Liste.Sie entweder die beiden repräsentieren Sequenzen von zahlen, aber beachten Sie, dass Tupel unveränderlich sind und Liste wandelbar Python-Objekte.

(1,2,3)-Tupel [1,2,3]-Liste Listen sind mutable, auf denen verschiedene Operationen durchgeführt werden kann in der Erwägung, dass Tupel unveränderlich sind, die nicht verlängert werden können.wir können nicht hinzufügen,löschen oder aktualisieren Sie ein element aus einem Tupel, sobald es erstellt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top