2010-02-17 6 views
8

Gibt es eine Situation, in der die Verwendung einer Liste zu einem Fehler führt und Sie stattdessen ein Tupel verwenden müssen?Eine Liste vs. Tupelsituation in Python

Ich weiß etwas über die Eigenschaften von beiden Tupeln und Listen, aber nicht genug, um die Antwort auf diese Frage zu finden. Wenn die Frage umgekehrt wäre, könnten Listen angepasst werden, Tupel jedoch nicht.

+0

mögliche Duplikate von http://StackOverflow.com/Questions/1983/Python-what-is-the-Difference-between-1-2-3-and-1-2-3-and-when-should- Ich benutze – outis

Antwort

14

Sie können Tupel als Wörterbuchschlüssel verwenden, da sie unveränderlich sind, Sie aber keine Listen verwenden können. ZB:

d = {(1, 2): 'a', (3, 8, 1): 'b'} # Valid. 
d = {[1, 2]: 'a', [3, 8, 1]: 'b'} # Error. 
+0

Danke für Ihre Antwort! Auf diese Weise lerne ich Python mehr und mehr kennen. – Alphonse

+0

Ebenso sind Sätze veränderbar, aber frozensets nicht. Wenn Sie also einen Satz als Schlüssel benötigen, müssen Sie ihn in einen eingefrorenen Satz konvertieren. – FogleBird

9

Wegen ihrer unveränderlichen Natur, Tupeln (im Gegensatz zu Listen) ist hashable. Dadurch können Tupel Schlüssel in Wörterbüchern und auch in Sätzen sein. Streng genommen zählt ihre Beherrschbarkeit, nicht ihre Unveränderlichkeit.

So neben dem Wörterbuch Schlüssel Antwort bereits gegeben, ein paar andere Dinge, die für Tupeln arbeiten aber keine Listen sind:

>>> hash((1, 2)) 
3713081631934410656 

>>> set([(1, 2), (2, 3, 4), (1, 2)]) 
set([(1, 2), (2, 3, 4)]) 
3

In String Formatierung Tupel sind Pflichtfelder:

"You have %s new %s" % ('5', 'mails') # must be a tuple, not a list! 

Die Verwendung einer Liste in diesem Beispiel führt zu dem Fehler "Nicht genügend Argumente für Formatzeichenfolge", da eine Liste als ein Argument betrachtet wird. Seltsam, aber wahr.