2008-09-03 21 views
36

Estoy aprendiendo Python para una clase ahora, y acabamos de cubrir las tuplas como uno de los tipos de datos. Leí la página de Wikipedia en él, pero no pude determinar dónde ese tipo de datos sería útil en la práctica. ¿Puedo tener algunos ejemplos, quizás en Python, donde se necesitaría un conjunto inmutable de números? ¿Cómo es esto diferente de una lista?¿Para qué es útil una tupla?

Respuesta

44
  • Las tuplas se utilizan siempre que desee devolver resultados múltiples de una función.
  • Dado que son inmutables, se pueden usar como claves para un diccionario (las listas no pueden).
+2

Desde la perspectiva de la persona PL persnickety: Python es múltiple confundir cosas aquí; en un lenguaje estáticamente tipado, un tipo 'tupla' coincide con valores que contienen un número fijo de subvalores con tipos fijos. E.G., (cadena * int), el tipo de tuplas que contiene una cadena y un entero. En un lenguaje de tipado dinámico, sin embargo, este sentido parece estar sumergido. La noción de inmutabilidad no es una que generalmente se asocia con tuplas; Python parece haber cooptado y re-propuesto el término 'tupla'. –

+0

Tuplas también son devueltos por algunos de los objetos de colección como enumerar() donde el conocimiento de tuplas es útil – Murphy

2

Los encuentro útiles cuando siempre trata con dos o más objetos como un conjunto.

1

Una lista siempre puede reemplazar una tupla, con respecto a la funcionalidad (excepto, al parecer, como claves en un dict). Sin embargo, una tupla puede hacer que las cosas vayan más rápido. Lo mismo es cierto para, por ejemplo, cadenas inmutables en Java, ¿cuándo necesitará alguna vez ser incapaz de alterar sus cadenas? ¡Nunca!

Acabo de leer una discusión decente sobre la limitación de lo que puede hacer para hacer mejores programas; Why Why Functional Programming Matters Matters

18

Tuplas son buenas teclas de diccionario cuando necesita combinar más de una pieza de datos en su clave y no tiene ganas de hacer una clase para ello.

a = {} 
a[(1,2,"bob")] = "hello!" 
a[("Hello","en-US")] = "Hi There!" 

He utilizado esta característica principalmente para crear un diccionario con claves que son coordenadas de los vértices de una malla. Sin embargo, en mi caso particular, la comparación exacta de las carrozas involucradas funcionó bien, lo que no siempre es cierto para sus propósitos [en cuyo caso probablemente convierta sus flotadores entrantes a algún tipo de entero de punto fijo]

+3

Nunca pensé en usarlos como claves de diccionario. Buena idea. – crystalattice

1

Una tupla es útil para almacenar múltiples valores. Como se observa, una tupla es como una lista que es inmutable, por ejemplo: una vez creado, no puede agregar/eliminar/intercambiar elementos.

Una de las ventajas de ser inmutable es que, dado que la tupla es de tamaño fijo, permite que el tiempo de ejecución realice ciertas optimizaciones. Esto es particularmente beneficioso cuando se usa un tupple en el contexto de un valor de retorno o un parámetro para una función.

2

Tuplas y listas tienen los mismos usos en general. Los tipos de datos inmutables en general tienen muchos beneficios, principalmente sobre problemas de concurrencia.

Por lo tanto, cuando tiene listas que no son de naturaleza volátil y necesita garantizar que ningún consumidor lo esté alterando, puede usar una tupla.

Ejemplos típicos son datos fijos en una aplicación como divisiones de empresas, categorías, etc. Si estos datos cambian, normalmente un solo productor reconstruye la tupla.

8

Me gusta this explanation.

Básicamente, debe usar tuplas cuando hay una estructura constante (la 1ª posición siempre contiene un tipo de valor y la otra, etc.), y las listas deben usarse para listas de valores homogéneos.

Por supuesto, siempre hay excepciones, pero esta es una buena guía general.

0

Además de los lugares donde se requieren sintácticamente como la cadena% de operación y para valores de devolución múltiples, utilizo tuplas como una forma de clases ligeras. Por ejemplo, supongamos que tiene un objeto que transfiere una cookie opaca a un llamante desde un método que luego pasa a otro método. Una tupla es una buena forma de empaquetar múltiples valores en esa cookie sin tener que definir una clase separada para contenerlos.

Aunque intento ser juicioso acerca de este uso particular. Si las cookies se usan ampliamente en todo el código, es mejor crear una clase porque ayuda a documentar su uso. Si solo se usan en un lugar (por ejemplo, un par de métodos), entonces podría usar una tupla. En cualquier caso, como es Python puede comenzar con una tupla y luego cambiarla a una instancia de una clase personalizada sin tener que cambiar ningún código en la persona que llama.

0

Una tupla es una secuencia de valores. Los valores pueden ser de cualquier tipo, y están indexados por entero, por lo que las tuplas no son como listas. La diferencia más importante es que las tuplas son inmutables.

Una tupla es una lista separada por comas de valores:

t = 'p', 'q', 'r', 's', 't' 

es una buena práctica para encerrar las tuplas entre paréntesis:

t = ('p', 'q', 'r', 's', 't') 
Cuestiones relacionadas