543 Stimmen

Liste vs. Tupel, wann ist welches zu verwenden?

Wann sollte man in Python Listen und wann Tupel verwenden?

Manchmal hat man keine andere Wahl, zum Beispiel wenn man

"hello %s you are %s years old" % x

dann muss x ein Tupel sein.

Aber wenn ich derjenige bin, der die API entwickelt und die Datentypen auswählt, wie lauten dann die Richtlinien?

867voto

jldupont Punkte 87330

Tupel sind von Natur aus von fester Größe, während Listen sind dynamisch.
Mit anderen Worten, ein tuple es unveränderlich während ein list es änderbar .

  1. Sie können keine Elemente zu einem Tupel hinzufügen. Tupel haben keine append- oder extend-Methode.
  2. Sie können keine Elemente aus einem Tupel entfernen. Tupel haben keine remove- oder pop-Methode.
  3. Sie können Elemente in einem Tupel finden, da dies das Tupel nicht verändert.
  4. Sie können auch die in Operator, um zu prüfen, ob ein Element in dem Tupel vorhanden ist.

  • Tupel sind schneller als Listen. Wenn Sie eine konstante Menge von Werten definieren und alles, was Sie jemals damit tun werden, ist, sie zu iterieren, verwenden Sie ein Tupel anstelle einer Liste.

  • Es macht Ihren Code sicherer, wenn Sie Daten, die nicht geändert werden müssen, "schreibgeschützt" haben. Die Verwendung eines Tupels anstelle einer Liste ist wie eine implizite Behauptung, dass diese Daten konstant sind und dass ein spezieller Gedanke (und eine spezielle Funktion) erforderlich ist, um dies außer Kraft zu setzen.

  • Einige Tupel können als Wörterbuchschlüssel verwendet werden (insbesondere Tupel, die unveränderliche Werte wie Zeichenketten, Zahlen und andere Tupel enthalten). Listen können niemals als Wörterbuchschlüssel verwendet werden, da Listen nicht unveränderlich sind.

Fuente: Eintauchen in Python 3

269voto

Ned Batchelder Punkte 342778

Es gibt eine ausgeprägte Kultur der Tupel für heterogene Sammlungen, ähnlich wie man sie in der struct s in C, und Listen sind für homogene Sammlungen, ähnlich wie Arrays. Aber ich habe das nie ganz mit dem in den anderen Antworten erwähnten Problem der Veränderbarkeit in Einklang bringen können. Die Veränderbarkeit hat etwas mit Zähnen zu tun (man kann ein Tupel tatsächlich nicht ändern), während die Homogenität nicht erzwungen wird und daher eine viel weniger interessante Unterscheidung zu sein scheint.

89voto

thornomad Punkte 6407

Ich glaube (und bin in Python kaum bewandert), dass der Hauptunterschied darin besteht, dass ein Tupel unveränderlich (sie kann nach der Zuweisung nicht mehr geändert werden) und eine Liste ist änderbar (Sie können anfügen, ändern, subtrahieren usw.).

Daher neige ich dazu, meine Tupel zu Dingen zu machen, die sich nach der Zuweisung nicht ändern sollten, und meine Listen zu Dingen, die sich ändern können.

54voto

AFoglia Punkte 7672

Muss sie veränderbar sein? Verwenden Sie eine Liste. Darf sie nicht veränderbar sein? Verwenden Sie ein Tupel.

Ansonsten ist es eine Frage der Wahl.

Für Sammlungen heterogener Objekte (wie eine Adresse, die in Name, Straße, Stadt, Bundesland und Postleitzahl unterteilt ist) verwende ich lieber ein Tupel. Sie können immer leicht zu benannte Tupel .

Ebenso bevorzuge ich eine Liste, wenn die Sammlung iteriert werden soll. Wenn es sich nur um einen Container handelt, der mehrere Objekte zusammenfasst, bevorzuge ich ein Tupel.

19voto

Amanda Nyren Punkte 485

Als erstes müssen Sie entscheiden, ob die Datenstruktur veränderbar sein soll oder nicht. Wie bereits erwähnt, sind Listen veränderbar, Tupel dagegen nicht. Dies bedeutet auch, dass Tupel für Wörterbuchschlüssel verwendet werden können, was bei Listen nicht der Fall ist.

Meiner Erfahrung nach werden Tupel im Allgemeinen dort verwendet, wo Reihenfolge und Position sinnvoll und konsistent sind. Bei der Erstellung einer Datenstruktur für ein "Choose your own adventure"-Spiel habe ich mich beispielsweise für Tupel anstelle von Listen entschieden, weil die Position im Tupel sinnvoll war. Hier ist ein Beispiel aus dieser Datenstruktur:

pages = {'foyer': {'text' : "some text", 
          'choices' : [('open the door', 'rainbow'),
                     ('go left into the kitchen', 'bottomless pit'),
                     ('stay put','foyer2')]},}

Die erste Position im Tupel ist die Auswahl, die dem Benutzer beim Spielen angezeigt wird, und die zweite Position ist der Schlüssel der Seite, zu der diese Auswahl führt.

Tupel sind auch speichereffizienter als Listen, obwohl ich mir nicht sicher bin, wann dieser Vorteil offensichtlich wird.

Lesen Sie auch die Kapitel über Listen und Tupel in Python denken .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X