¿Por qué no hay comprensión de tuplas en Python?

Resuelto Shady Xu asked hace 11 años • 13 respuestas

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 tuplecomprensión. ¿Porqué es eso?

Supongo que a tuplees inmutable, pero ésta no parece ser la respuesta.

Shady Xu avatar Jun 05 '13 19:06 Shady Xu
Aceptado

Puedes usar una expresión generadora:

tuple(i for i in (1, 2, 3))

pero ya se utilizaron paréntesis para… expresiones generadoras.

Martijn Pieters avatar Jun 05 '2013 12:06 Martijn Pieters

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)
chepner avatar Jun 05 '2013 13:06 chepner

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)),
czheo avatar Nov 24 '2017 15:11 czheo