Wann sollte man in Python Listen und wann Tupel verwenden?
Manchmal hat man keine Wahl, zum Beispiel wenn man
"hello %s you are %s years old" % x
dann muss x ein Tupel sein.
Wenn ich aber derjenige bin, der die API entwickelt und die Datentypen auswählt, was sind dann die Richtlinien?
Tupel sind von Natur aus von fester Größe, während Listen dynamisch sind.
Mit anderen Worten: Ein "Tupel" ist unveränderlich, während eine "Liste" veränderlich 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 zu überschreiben.
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.
Quelle: Eintauchen in Python 3
Ich glaube (und ich bin kaum versiert in Python), dass der Hauptunterschied ist, dass ein Tupel immutable (es kann nicht an Ort und Stelle nach der Zuweisung geändert werden) und eine Liste ist mutable (Sie können anhängen, ändern, subtrahieren, etc.).
Ich neige also 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.
Muss sie veränderbar sein? Verwenden Sie eine Liste. Darf es 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 aufgeteilt ist) verwende ich lieber ein Tupel. Sie können immer leicht in benannte Tupel umgewandelt werden.
Ebenso bevorzuge ich eine Liste, wenn über die Sammlung iteriert werden soll. Wenn es sich nur um einen Container handelt, der mehrere Objekte zusammenfasst, bevorzuge ich ein Tupel.