2010-08-05 3 views
17

Je souhaite supprimer tous les éléments d'une liste qui contient (ou ne contient pas) un ensemble de caractères spécifiques. Cependant, je rencontre des problèmes d'itérer sur la liste et de suppression d'éléments Je vais le long. Deux exemples à peu près égaux de ceci sont donnés ci-dessous. Comme vous pouvez le voir, si deux éléments qui doivent être supprimés se suivent directement, le second ne sera pas supprimé.Suppression d'éléments d'une liste contenant des caractères spécifiques

Je suis sûr qu'il y a une façon très simple de faire cela en python, donc si quelqu'un le sait, aidez-moi - je suis en train de faire une copie de la liste entière et d'en oter plus d'une ... Pas 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'] 

figured it out:

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

voudrais encore savoir s'il y a un moyen de régler l'itération arrière d'un ensemble lors de l'utilisation pour x dans l bien que.

+0

Dupe-ish: http: //stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating-in-python – bhangm

+0

Veuillez accepter la réponse qui vous a aidé à résoudre votre problème au lieu d'ajouter "Résolu" au titre. Cliquez sur la coche verte à côté d'une réponse pour l'accepter. (Si aucune des réponses ne vous a aidé, veuillez ajouter une réponse de votre choix expliquant comment vous avez résolu le problème.) Merci, et bienvenue dans Stack Overflow. –

Répondre

35

Liste 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'] 
6

Si je vous comprends bien,

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

peut faire le travail.

+1

N'est pas compatible pour le style flake8. Je reçois une erreur: 'SashaListComprehension.py:70:45: Le test E713 pour l'appartenance devrait être 'not in''. Pour flake8 nous avons besoin de "si" 2 "non" comme [** MattH answer **] (https://stackoverflow.com/a/3416473/5951529), pas de "si non" 2 "'. Merci. –

+1

@ СашаЧерных, merci, j'ai modifié la réponse – loevborg

0

Problème que vous pourriez avoir, c'est que vous essayez de modifier la séquence en même temps que vous bouclez dessus pour t boucle.

Questions connexes