2010-02-17 21 views
8

C'è una situazione in cui l'uso di una lista porta a un errore, e invece si deve usare una tupla?Una lista contro la situazione di tupla in Python

Conosco qualcosa sulle proprietà di entrambe le tuple e le liste, ma non abbastanza da trovare la risposta a questa domanda. Se la domanda fosse il contrario, sarebbe che le liste possono essere aggiustate ma le tuple no.

+0

possibile duplicato di http://stackoverflow.com/questions/1983/python-what-is-the-difference-between-1-2-3-and-1-2-3-and-when-should- i-use – outis

risposta

14

È possibile utilizzare le tuple come chiavi del dizionario, poiché sono immutabili, ma non è possibile utilizzare elenchi. Ad esempio:

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

Grazie per la risposta! In questo modo ho imparato a conoscere Python sempre di più .. – Alphonse

+0

Allo stesso modo, i set sono mutabili ma i frozenset no. Quindi se hai bisogno di un set come chiave, devi convertirlo in un frozenset. – FogleBird

9

causa della loro natura immutabile, tuple (a differenza di liste) sono hashable. Questo è ciò che consente alle tuple di essere chiavi nei dizionari e anche membri di set. A rigor di termini, è la loro opacità, non la loro immutabilità che conta.

Quindi, oltre al tasto di risposta dizionario già dato, un paio di altre cose che funzionano per le tuple, ma non elenchi sono:

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

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

In formattazione delle stringhe tuple sono obbligatori:

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

L'utilizzo di un elenco in quell'esempio produce l'errore "argomenti non sufficienti per la stringa di formato", poiché un elenco viene considerato come un argomento. Strano ma vero.

Problemi correlati