Suppression d'éléments dans une liste de listes [Résolu]

-
Bonjour,

Débutant en Python, je bute sur un problème avec Del et Remove pour supprimer des éléments dans une liste en deux dimensions. Voici mon code. Quelqu'un peut-il m'expliquer pourquoi ce code ne supprime que la moitié des éléments de la liste et ce que je devrai faire pour que tous les éléments soient supprimés ?
Merci infiniment,


a = [[2,3],[3,4],[6,1],[8,9],[7,2],[0,4],[6,8]]
print (a)
print ("Suppression")
for i in a:
    a.remove(i)
print (a)

Ce que j'obtiens :

[[2, 3], [3, 4], [6, 1], [8, 9], [7, 2], [0, 4], [6, 8]]
Suppression
[[3, 4], [8, 9], [0, 4]]
Afficher la suite 

2 réponses

Messages postés
16028
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 septembre 2019
2413
0
Merci
Bonjour,

Le problème c'est que ton programme supprimer le 1er élément, puis le 2è, puis le 3è, etc.
Mais quand tu as supprimé le 1er élément, le 2è est devenu le 1er, le 3è le 2è, etc.
Donc quand tu supprimes le "2è" élément, en réalité c'est le 3è que tu supprimes car il a été décalé.
C'est pour ça que dans le résultat final, tu as toujours le 2è élément (décalé à la 1è place), etc.
Pour corriger le bug il faut bien prendre en compte l'état de la liste au moment où tu fais la suppression, en tenant compte des décalages opérés par les suppressions précédentes.
Une manière simple de faire est de supprimer les éléments en commençant par le dernier.
Commenter la réponse de KX
0
Merci
Pour supprimer Tous les elements
1)
a = [[2, 3], [3, 4], [6, 1], [8, 9], [7, 2], [0, 4], [6, 8]]
print(a)
i=0
print("Suppression")
while i<len(a):
a.remove(a[i])
print(a)


2)
a = [[2, 3], [3, 4], [6, 1], [8, 9], [7, 2], [0, 4], [6, 8]]
print(a)
i=0
print("Suppression")
while i<len(a):
del(a[i])
print(a)
Merci beaucoup pour vos réponses, je viens de faire grâce à vous un pas supplémentaire sur les chemins pythonesques.
Pour supprimer Tous les elements

a.clear()
Commenter la réponse de beneymar