Je veux supprimer des éléments de la liste 'A' où la liste 'B' contient des éléments avec des mots trouvés dans la liste 'A' Le résultat doit être: p> print a
['four five six', 'seven eight nine']
4 Réponses :
Utilisez une liste Comp et n'importe quel code> à la place:
Le problème de l'affiche original découle de la modification de la liste tout en itérant. Ce n'est pas le seul moyen d'éviter cela, mais c'est un bon.
Les listes ne doivent pas être modifiées lorsqu'elles sont itératées. Cela peut avoir des effets secondaires indésirables, tels que la boucle sautant sur des objets.
généralement dans Python, vous devriez éviter les boucles qui ajoutent et suppriment des éléments de la liste une à la fois. Habituellement, ces types de boucles peuvent être remplacés par des compréhensions de liste plus idiomatique. P>
for i in a[:]:
for x in b:
if x in i:
a.remove(i)
for i in reversed(range(len(a))):
for j in reversed(range(len(b))):
if b[j] in a[i]:
a.remove(a[i])
# output = ['seven eight nine']
You have to go through your list from the end, otherwise items gets reordered.
Lorsque vous iTerez sur une liste, vous ne devez jamais supprimer des éléments! Cela gâchera votre itération. Le seul moyen de modifier de manière proprement une liste tout en itération sur celle-ci dans Python, c'est itérer à l'arrière de la longueur de la liste et supprimer des éléments à votre guise.
Par exemple, cela fonctionne comme une boucle de suppression continue en place: P >
a = ['one two three', 'four six five', 'seven eight nine']
b = ['two', 'five six']
for i in range(len(a) - 1, -1, -1):
for x in b:
for word in x.split():
if word in a[i]:
del a[i]
print a # correctly prints ['seven eight nine']