Un jour, alors que j'écrivais du code python, quelque chose d'étrange s'est produit ...
x = [1, 2, 3, 4, 5]
for i in x:
x.remove(i)
print(x)
>>>
[2, 3, 4, 5] #Reconnaître
[2, 4, 5] # ???Si vous retirez 1 et 2[3, 4, 5]Puis!?!?
[2, 4] # ???????
Au fait, c'était la même chose quand je l'ai essayé avec du rubis.
x = [1, 2, 3, 4, 5]
for i in x do
x.delete(i)
print(x)
end
>>>
[2, 3, 4, 5][2, 4, 5][2, 4] => [2, 4]
Bonjour, "pour i en x" signifie
Il semble qu'il essaie de se référer au 0, 1, 2, ..., nième de x à chaque fois que la boucle est bouclée.
Il est bon de copier la liste avec [:] ou copy ()
x = [1, 2, 3, 4, 5]
for i in x[:]:
x.remove(i)
print(x)
>>>
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]
from copy import copy
x = [1, 2, 3, 4, 5]
for i in copy(x):
x.remove(i)
print(x)
>>>
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]
J'étais inquiet environ 30 minutes, "Hmm, hmm ...". Si vous appuyez dessus avec numpy, vous serez dérouté par la méthode destructive de la liste standard ...
Recommended Posts