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