inicializar tupla con listas vacias

Alexis Roda alexis.roda.villalonga en gmail.com
Mar Sep 5 21:02:49 CEST 2006


En/na Pau Cervera Badia ha escrit:
> Se me ocurre,
> 
>  >>> n = 4
>  >>> a = ()
>  >>> for i in range(n):
> ...     a = a + ([],)
> ...

sí, esta es la forma de hacerlo. Puedes utilizar /list comprehensions/ 
para reducirlo un poco, pero es lo mismo:

a = tuple([ [] for _ in xrange(n) ])

> pero no acabo de entender porqué el primer método no funciona. Supongo 
> que tinene que ver con __mul__ de tuple que en vez de llamar al 
> constructor de list copia la referencia?

__mul__ se limita a copiar el valor que recibe, una referencia a una 
lista en tu caso.

Se ve mejor si utilizas variables extra.

El primer caso es equivalente a:

l = []
a = 4 * (l, )

utilizas cuatro veces la *misma* lista, (l, l, l, l).

En el segundo se crea una lista en cada iteración del bucle, cuatro 
listas distintas:

for _ in xrange(4) :
   l = []
   a += (l, )



Saludos
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es