Matrices en python
Zara
yozara en terra.es
Mie Ene 30 10:17:34 CET 2008
On Wed, 30 Jan 2008 09:45:17 +0100, Zara <yozara en terra.es> wrote:
>On Wed, 30 Jan 2008 09:28:16 +0100, Zara <yozara en terra.es> wrote:
>
>>On Tue, 29 Jan 2008 20:30:03 +0100, Arnau Sanchez <pyarnau en gmail.com>
>>wrote:
>>
>>>Daniel García Moreno escribió:
<...>
>>
>>
>>Con un pequeño cambio de sintaxis, propongo:
>>
>><code> def crea_matriz(forma, valor=0):
>><code> val=valor
>><code> if forma:
>><code> formas=forma
>><code> formas.reverse()
>><code> for unaForma in formas:
>><code> val=[val]*unaForma
>><code> return val
>><code>
>><code> matriz = crea_matriz([2, 3, 4])
>>
>>La variación de sintaxis al entregar la forma como una lista en vez de
>>una tupla, es para poder usar el método reverse. Otra alternativa
>>darle a forma la lista de dimentsiones en orden inverso, en ese caso
>>podría ser una lista o una tupla indistintamente:
>>
>><code> def crea_matriz2(forma, valor=0):
>><code> val=valor
>><code> if forma:
>><code> for unaForma in forma:
>><code> val=[val]*unaForma
>><code> return val
>><code>
>><code> matriz2a = crea_matriz2((4,3,2))
>><code> matriz2b = crea_matriz2([4,3,2])
>>
>
>¡Argh! Pienso las cosas, pero no lo suficiente...
>La matriz creada es incorrecta, puesto que genera elementos por
>referencia, no por copia.
>
Hay que cambiar el bucle generador por el siguiente:
<code> for unaForma in forma:
<code> nuevo=[]
<code> for i in range(unaForma):
<code> nuevo.append(copy.deepcopy(val))
<code> val=nuevo
y por supuesto, hay que añadir al principio:
<code> import copy
Saludos,
Zara
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es