Maison > développement back-end > Tutoriel Python > Pourquoi la suppression itérative d'éléments d'une liste Python produit-elle des résultats inattendus ?

Pourquoi la suppression itérative d'éléments d'une liste Python produit-elle des résultats inattendus ?

Patricia Arquette
Libérer: 2024-12-23 06:01:13
original
223 Les gens l'ont consulté

Why Does Iteratively Removing Items from a Python List Produce Unexpected Results?

Comportement étrange lors de la suppression itérative d'éléments en Python

En Python, des résultats étranges peuvent se produire lors de la suppression d'éléments d'une liste au cours d'une itération. Considérez le code suivant :

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)
Copier après la connexion

Sortie attendue : [20, 21, ..., 49]

Sortie réelle : [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, ..., 49]

Raison :

Le problème vient de la modification de la liste lors de l'itération. Lors de la première itération de la boucle, 1 est supprimé. Cependant, l'itération suivante ne pointe plus vers 2 dans la liste raccourcie mais vers 3. Cela continue jusqu'à ce qu'il ne reste que des éléments supérieurs à 20.

Solutions :

  • Liste Compréhension :
numbers = [n for n in numbers if n >= 20]
Copier après la connexion
  • Modification sur place :
numbers[:] = (n for n in numbers if n >= 20)
Copier après la connexion
  • Avant Traitement avec générateur Expression :
for i, n in enumerate(numbers):
    if n < 20:
        print("do something")
        numbers[i] = None
numbers = [n for n in numbers if n is not None]
Copier après la connexion

Il est important de noter que modifier la longueur d'une liste lors d'une itération n'est généralement pas recommandé. Les solutions proposées offrent des approches alternatives pour atteindre le résultat souhaité.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal