¿Por qué no hay comprensión de tuplas en Python?
Como todos sabemos, existe la comprensión de listas, como
[i for i in [1, 2, 3, 4]]
y hay comprensión del diccionario, como
{i:j for i, j in {1: 'a', 2: 'b'}.items()}
pero
(i for i in (1, 2, 3))
terminará en un generador, no en una tuple
comprensión. ¿Porqué es eso?
Supongo que a tuple
es inmutable, pero ésta no parece ser la respuesta.
Puedes usar una expresión generadora:
tuple(i for i in (1, 2, 3))
pero ya se utilizaron paréntesis para… expresiones generadoras.
Raymond Hettinger (uno de los desarrolladores principales de Python) dijo lo siguiente sobre las tuplas en un tweet reciente :
Consejo de #python: Generalmente, las listas son para bucles; tuplas para estructuras. Las listas son homogéneas; tuplas heterogéneas. Listas de longitud variable.
Esto (para mí) respalda la idea de que si los elementos de una secuencia están lo suficientemente relacionados como para ser generados por un, bueno, generador, entonces debería ser una lista. Aunque una tupla es iterable y parece simplemente una lista inmutable, en realidad es el equivalente en Python de una estructura C:
struct {
int a;
char b;
float c;
} foo;
struct foo x = { 3, 'g', 5.9 };
se convierte en Python
x = (3, 'g', 5.9)
Desde Python 3.5 , también puedes usar *
la sintaxis de descompresión de splat para descomprimir una expresión generadora:
*(x for x in range(10)),