[Python] Strano comportamento di list

Stefano Dal Pra s.dalpra a gmail.com
Lun 13 Ott 2008 17:47:24 CEST


La lista viene modificata dentro il for,
per cui ciclo "salta" degli elementi:

L1=[(1, 3, 16300), (2, 0, 12000), (3, 0, 13500), (3, 1500, 1000), (1,
4, 38473), (1, 5, 38473), (5, 5, 38473), (3, 5, 38473), (2, 5, 38473),
(1, 1, 38473)]

L=L1[:]

>>> for k in L:
...    print "controllo %s"%(str(k))
...    if k[0] == 1:
...       L.remove(k)
...
controllo (1, 3, 16300)
controllo (3, 0, 13500)
controllo (3, 1500, 1000)
controllo (1, 4, 38473)
controllo (5, 5, 38473)
controllo (3, 5, 38473)
controllo (2, 5, 38473)
controllo (1, 1, 38473)

come vedi, dopo (1, 3, 16300) k diventa (3, 0, 13500), saltando  (2, 0, 12000),
perche' k diventa il next() elemento
di una lista DIVERSA (che ha perso il primo elemento, in questo caso)

Stefano

On Mon, Oct 13, 2008 at 3:44 PM,  <michele a nectarine.it> wrote:
> Ciao,
> sto cercando di eliminare alcuni elementi da una lista, ma ottengo uno
> strano comportamento:
>
>>>> L
> [(1, 3, 16300), (2, 0, 12000), (3, 0, 13500), (3, 1500, 1000), (1, 4,
> 38473), (1
> , 5, 38473), (5, 5, 38473), (3, 5, 38473), (2, 5, 38473), (1, 1, 38473)]
>>>> for k in L:
> ...     if k[0] == 1:
> ...             L.remove(k)
> ...
>>>> L
> [(2, 0, 12000), (3, 0, 13500), (3, 1500, 1000), (1, 5, 38473), (5, 5,
> 38473), (3
> , 5, 38473), (2, 5, 38473)]
>
> Come vedete (1, 5, 38473) è rimasto, e non capisco perché.
>
> La mia versione di python:
> ActivePython 2.5.2.2 (ActiveState Software Inc.) based on
> Python 2.5.2 (r252:60911, Mar 27 2008, 17:57:18) [MSC v.1310 32 bit
> (Intel)] on
> win32
>
> Dove sbaglio?
> Grazie
>
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>


Maggiori informazioni sulla lista Python