Pièges liés à l'utilisation de la boucle for pour supprimer des éléments dans une liste en python3

不言
Libérer: 2018-04-19 11:28:45
original
2271 Les gens l'ont consulté

L'article suivant partagera avec vous une discussion détaillée des pièges liés à l'utilisation d'une boucle for pour supprimer des éléments dans une liste en python3. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Jetons un coup d'œil ensemble

L'objet de l'instruction de boucle for est un objet itérable. L'objet itérable doit implémenter la méthode __iter__ ou iter et renvoyer un itérateur. Les itérateurs doivent uniquement implémenter la méthode __next__ ou next.

Vérifions maintenant pourquoi la liste prend en charge l'itération :


x = [1,2,3]
its = iter(x)
# its = x.__iter__()
print(type(its))
# print(its.__next__())
# print(its.__next__())
# print(its.__next__())
print(next(its))
print(next(its))
print(next(its))
Copier après la connexion


Résultat :


<class &#39;list_iterator&#39;>
1
2
3
Copier après la connexion


Comment boucle l'instruction for Étoffe de laine? Les étapes sont les suivantes :

(1) Déterminez d'abord si l'objet est un objet itérable. Sinon, signalez directement une erreur et lancez une exception TypeError. Si tel est le cas, appelez le __iter__ ou l'iter. méthode et renvoie un L'itérateur

(2) appelle en continu la méthode __next__ ou suivante de l'itérateur, renvoyant une valeur dans l'itérateur en séquence à chaque fois

(3) itère jusqu'à la fin, aucune mise à jour S'il y a plusieurs éléments, une exception StopIteration sera levée. Python gérera cette exception par lui-même et ne l'exposera pas aux développeurs


list1 = [1,2,3,4,5,6]
for i in list1:
 if i == 2:
  list1.remove(i)
 print(i)
print(list1)
Copier après la connexion


.

Résultat :


1
2
4
5
6
[1, 3, 4, 5, 6]
Copier après la connexion


Le résultat imprimé par la deuxième impression est évidemment Après avoir supprimé la liste des éléments 2, pourquoi n'y a-t-il pas 3 dans la première impression Parce que lors de l'exécution de l'instruction for, un itérateur est d'abord généré, puis la méthode suivante est utilisée pour renvoyer les valeurs ? dans l'itérateur dans l'ordre. Lorsque l'élément 2 est supprimé de la liste, l'index de l'élément 3 devient l'index de l'élément 2 d'origine, poussant l'élément 3 vers la position de l'élément 2, donc la méthode suivante ne renvoie pas la valeur 3. . En python, utilisez la fonction iter pour obtenir une itération de type agrégation ordonnée. Personnellement, je comprends l'itérateur comme une liste chaînée unidirectionnelle avec un pointeur suivant. L'itérateur obtenu est l'en-tête de la liste chaînée, le contenu de l'en-tête est vide et. le pointeur suivant pointe vers le premier élément du type d’agrégat ordonné.

Lors de l'accès au pointeur suivant du dernier élément de la liste chaînée, python signalera une erreur StopIteration.

Recommandations associées :

Pièges à prendre en compte lors de la suppression d'éléments de la liste Python


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!