En Python, ¿cuándo hay que utilizar listas y cuándo tuplas?
A veces no tienes elección, por ejemplo si tienes
"hello %s you are %s years old" % x
entonces x debe ser una tupla.
Pero si soy yo quien diseña la API y quien elige los tipos de datos, ¿cuáles son las directrices?
Las tuplas son de tamaño fijo, mientras que las listas son dinámicas.
En otras palabras, una tupla
es inmutable mientras que una lista
es mutable.
in
para comprobar si un elemento existe en la tupla.Si estás definiendo un conjunto constante de valores y todo lo que vas a hacer con él es iterar a través de él, utiliza una tupla en lugar de una lista.
Hace que tu código sea más seguro si "proteges contra escritura" los datos que no necesitan ser modificados. Usar una tupla en lugar de una lista es como tener una afirmación implícita de que estos datos son constantes, y que se requiere un pensamiento especial (y una función específica) para anular eso.
Algunas tuplas pueden usarse como claves de diccionario (específicamente, tuplas que contienen valores inmutables como cadenas, números y otras tuplas). Las listas nunca pueden usarse como claves de diccionario, porque las listas no son inmutables.
Fuente: Sumérgete en Python 3
Creo (y no estoy muy versado en Python) que la principal diferencia es que una tupla es inmutable (no se puede cambiar de lugar después de la asignación) y una lista es mutable (se puede añadir, cambiar, restar, etc).
Por lo tanto, tiendo a hacer mis tuplas cosas que no deben cambiar después de la asignación y mis listas cosas que pueden.
¿Debe ser mutable? Utiliza una lista. ¿No debe ser mutable? Utiliza una tupla.
De lo contrario, es una cuestión de elección.
Para colecciones de objetos heterogéneos (como una dirección dividida en nombre, calle, ciudad, estado y código postal) prefiero utilizar una tupla. Siempre se pueden promover fácilmente a tuplas con nombre.
Del mismo modo, si se va a iterar sobre la colección, prefiero una lista. Si sólo se trata de un contenedor que contiene varios objetos en uno, prefiero una tupla.