Oppure

Loading
12/08/21 9:23
Peke
Ciao a tutti, ho un problema con una parte del mio programma questo è il codice:

import random as rd

wa=[[],[],[]]
wb=[[],[]]
ba=[]
bb=[]
for i in range(4):
for y in range(3):
wa[y].append(rd.random())


dz_dwa=wa
dz_dwb=wb
dz_dwb=wb
dz_dba=ba
dz_dbb=bb
print(wa)
for i in range(len(wa)):
for y in range(len(wa[i])):
dz_dwa[i][y]=5


print(wa)

Nel primo print(wa) i numeri sono randomici mentre nel secondo print(wa) i numeri diventano tutti 5, tuttavia dentro il for non c'è niente che modifichi wa inserendoci dentro 5

Grazie mille
12/08/21 11:13
Carlo
Sono alle prime armi con Python ma provo a rispondere lo stesso.
guarda la riga: dz_dwa=wa
credo che questa assegnazione venga presa per riferimento, qualsiasi valore andrai a modificare in dz_dwa, si riperquoterà su wa, perché entrambi i vettori sono identici anche a livello di allocazione.

Per evitare il problema devi dichiarare il vettore dz_dwa e poi ricopiare wa in dz_dwa in modo da renderli indipendenti.

import random as rd

wa=[[],[],[]]
dz_dwa=[[],[],[]]
wb=[[],[]]
ba=[]
bb=[]
for i in range(4): 
   for y in range(3):
      wa[y].append(rd.random())

for i in range(len(wa)):
   dz_dwa[i] = wa[i]
   
dz_dwb=wb
dz_dwb=wb
dz_dba=ba
dz_dbb=bb
print("wa originale")
print(wa)
print("dz_dwa copiato da wa")
print(dz_dwa)

for i in range(len(wa)): # i 5 li scrivi per tre volte
  for y in range(len(wa)):
     dz_dwa[y]=5
    
print("dz_dwa sovrascritto con i 5")
print(dz_dwa)
print("wa originale")
print(wa)

Potrebbero anche esserci istruzioni dedicate come clone o similia...
Non sono in grado di valutare la correttezza logica del tuo codice, che mi sembra strana perché con l'ultimo doppio for sovrascrivi più volte i tre valori inutilmente.
Ultima modifica effettuata da Carlo 15/08/21 20:16
in programmazione tutto è permesso
12/08/21 15:02
Peke
Hey Carlo, grazie mille, ho preso spunto da ciò che mi hai consigliato e sono riuscito a risolvere il probelma