web-dev-qa-db-fra.com

Supprimer des éléments d'une liste contenant des caractères spécifiques

Je souhaite supprimer tous les éléments d'une liste qui contient (ou ne contient pas) un ensemble de caractères spécifiques. Toutefois, des problèmes surviennent lors de l'itération de la liste et de la suppression d'éléments au fur et à mesure. Deux exemples à peu près égaux sont donnés ci-dessous. Comme vous pouvez le constater, si deux éléments à supprimer se suivent directement, le second ne sera pas supprimé.

Je suis sûr qu'il existe un moyen très simple de faire cela en python. Si quelqu'un le sait, aidez-moi, je suis en train de faire une copie de la liste complète et de l'itérer sur l'un, et de supprimer des éléments dans l'autre ... une bonne solution je suppose

>>> l
['1', '32', '523', '336']
>>> for t in l:
...     for c in t:
...         if c == '2':
...             l.remove(t)
...             break
...             
>>> l
['1', '523', '336']
>>> l = ['1','32','523','336','13525']
>>> for w in l:
...     if '2' in w: l.remove(w)
...     
>>> l
['1', '523', '336']

Deviner:

>>> l = ['1','32','523','336','13525']
>>> [x for x in l if not '2' in x]
['1', '336']

Voudrait toujours savoir s’il est possible de définir une nouvelle itération lors de l’utilisation de x dans l. 

28
Vidar

Liste des compréhensions:

>>> l = ['1', '32', '523', '336']
>>> [ x for x in l if "2" not in x ]
['1', '336']
>>> [ x for x in l if "2" in x ]
['32', '523']
49
MattH

Si je te comprends bien,

[x for x in l if "2" not in x]

pourrait faire le travail.

7
loevborg

Le problème que vous pourriez avoir est que vous essayez de modifier la séquence en même temps que vous passez en boucle dessus.

0
Tony Veijalainen