PDA

Visualizza la versione completa : [PYTHON] Ciclo for per scansione di una lista


newlife05
26-07-2009, 18:54
guardate qua:


a = ['r','r','r','r','r']

for i in a:
if i == 'r':
a.remove(i)

e cosa ottengo invece di una lista vuota? una lista con ancora 'r' al uso interno. Perchè?

c_junior
27-07-2009, 01:58
io di python non so molto ma penso che la variabile i contenga l'indice dell'array e non il contenuto.
prova a fare cosi

a = ['r','r','r','r','r']
for i in a:
if a(i) == 'r':
a.remove(i)

newlife05
27-07-2009, 03:01
no non contiene l'indice, ma proprio il contenuto è questo il problema.

billiejoex
27-07-2009, 11:30
Originariamente inviato da newlife05
guardate qua:


a = ['r','r','r','r','r']

for i in a:
if i == 'r':
a.remove(i)

e cosa ottengo invece di una lista vuota? una lista con ancora 'r' al uso interno. Perchè?

Perchè il for all'inizio si presuppone che debba ciclare su 5 elementi ma nel frattempo tu ne elimini alcuni (3) dalla lista.

Se la lista contiene pochi elementi puoi risolvere il problema ciclando su una copia di quella lista, in questo modo:



a = ['r','r','r','r','r']

for i in a[:]:
if i == 'r':
a.remove(i)



...altrimenti cambiare totalmente approccio, ma dipende da cosa devi effettivamente fare.

newlife05
30-07-2009, 12:04
ho risolto proprio con la copia perchè ho scoperto che l'indice non cambia anche se elimino un elemento, quindi alla fine restano elementi. ma per liste grande che faccio?

billiejoex
30-07-2009, 14:23
Dipende da cosa devi fare. Prova a dare qualche dettaglio in più.
Ad esempio, potresti eliminare in un colpo solo tutti i doppioni utilizzando un set() è poi decidere cosa eliminare:


>>> a = ['r','r','r','r','r']
>>> a = set(a)
>>> a
set(['r'])
>>> a.remove('r')
>>> a
set([])


...ma se vuoi che eventuali altri elementi doppi non vengano eliminati non fa ovviamente al caso tuo.

newlife05
01-08-2009, 13:46
ok grazie

Loading