2010-02-17 13 views
8

¿Hay una situación en la que el uso de una lista conduce a un error, y debe utilizar una tupla en su lugar?vs. situación tupla de Python

sé algo acerca de las propiedades de ambos tuplas y las listas, pero no lo suficiente para averiguar la respuesta a esta pregunta. Si la pregunta fuera al revés, sería que las listas pueden ajustarse pero las tuplas no.

+0

posible duplicado de http://stackoverflow.com/questions/1983/python-what-is-the-difference-between-1-2-3-and-1-2-3-and-when-should- i-uso – outis

Respuesta

14

Usted puede usar tuplas como claves de diccionario, porque son inmutables, pero no se puede utilizar listas. Por ejemplo:

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

Gracias por su respuesta! De esta manera me llegan a conocer Python más y más .. – Alphonse

+0

Del mismo modo, los conjuntos son mutables pero frozensets no lo son. Por lo tanto, si necesita un juego como clave, debe convertirlo a un juego frozenset. – FogleBird

9

Debido a su naturaleza inmutable, tuplas (a diferencia de las listas) son hashable. Esto es lo que permite que las tuplas sean claves en diccionarios y también miembros de conjuntos. En rigor, lo que cuenta es su capacidad de manejo, no su inmutabilidad.

Así, además de la respuesta clave de diccionario ya dada, un par de otras cosas que trabajarán para tuplas pero no listas son:

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

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

En formato de cadenas tuplas son obligatorios:

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

El uso de una lista en ese ejemplo produce el error "no hay argumentos suficientes para la cadena de formato", porque una lista se considera como un solo argumento. Raro pero cierto

Cuestiones relacionadas