[PYTHON] Si vous supprimez la liste à mettre en boucle, vous deviendrez terrible.

Origine

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.

Contre-mesures

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]
[]

Épilogue

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

Si vous supprimez la liste à mettre en boucle, vous deviendrez terrible.
Si vous écrivez View decorator dans urls.py dans Django, la liste sera plus élevée.
Que faire si vous vous fâchez contre les `` déclarations '' doivent être une liste 2D ... dans la flèche matplotlib
Que faire si vous obtenez "La session n'a pas pu être ouverte" lors de l'installation de CentOS sur VirtualBox
Que faire si vous obtenez l'erreur Le script WSGI cible '/ var / www / xxx / xxx.wsgi' ne peut pas être chargé en tant que module python
Si vous ajoutez sudo dans ubuntu, il sera appelé le python par défaut.
Si une exception survient dans la fonction, elle sera transmise à l'appelant 2
Si une exception survient dans la fonction, elle sera transmise à l'appelant 1
[Python] Comment supprimer les valeurs en double de la liste
Si vous obtenez l'erreur "la matrice de base est singulière à la précision de travail" dans GLPK
Le langage de programmation que vous souhaitez pouvoir utiliser
Que faire si vous obtenez l'erreur ʻERR_FEATURE_UNAVAILABLE_ON_PLATFORM` lors de l'utilisation de ts-node-dev sous Linux
[Python] Si vous créez un fichier avec le même nom que le module à importer, une erreur d'attribut se produira.
Essayez d'obtenir la liste des fonctions du paquet Python> os
[Python] Il peut être utile de lister les trames de données
Que faire si la dépendance du package ne peut pas être réparée
Que faire si Combinaisons devient «couverture inconnue»
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Si vous souhaitez que vos collègues utilisent la même langue
Que faire si vous recevez le message "" ~ .pkg "est corrompu et ne peut pas être ouvert" lors de l'installation de wxPython sur Mac OS X
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
Que faire si vous obtenez moins zéro en Python
Si vous donnez une liste avec l'argument par défaut de la fonction ...
Que faire si vous obtenez une erreur de décodage Unicode avec l'installation de pip
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
Assurez-vous que python peut convertir / convertir une chaîne de caractères en int
Que faire lorsque vous obtenez "Je ne peux pas voir le site !!!!"
Comment trouver lorsque vous ne connaissez pas le répertoire d'installation Java
Que faire si vous obtenez un avertissement "Mauvaise plateforme Python" lors de l'utilisation de Python avec l'EDI NetBeans
Si vous souhaitez simplement obtenir le fichier de vidage du serveur, il était pratique de créer un serveur http
Comment obtenir la version Python
Si vous montez sur le Titanic ... vous mourez.
Si vous souhaitez inclure awsebcli dans CircleCI, spécifiez la version de python
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
J'ai mesuré 6 méthodes pour obtenir l'indice de la valeur maximale (valeur minimale) de la liste
Que faire si vous vous perdez dans la référence de fichier avec FileNotFoundError
Que faire si vous vous fâchez avec TensorFlow v2 sans l'attribut "app"
Que faire si vous êtes bloqué pendant l'installation d'Anaconda sur Linux
Si vous souhaitez obtenir plusieurs statistiques avec groupby of pandas v1
Que faire lorsque TypeError se produit au minimum et au maximum de numpy
Que faire si vous obtenez une erreur lors du chargement de mnist
Qt n'est-il pas la bibliothèque la plus puissante pour une sortie facile de SVG?
Obtenez le titre de la chanson à partir du titre de la vidéo que vous avez chanté
Que faire si vous obtenez Impossible de récupérer l'URL 443 avec pip
Si vous obtenez une erreur sans attribut dans boto3, vérifiez la version