2010-08-05 18 views
17

Quiero eliminar todos los elementos de una lista que contiene (o no contiene) un conjunto de caracteres específicos, sin embargo estoy ejecutando problemas para iterar sobre la lista y eliminar elementos como Yo voy bien. Dos ejemplos más o menos iguales de esto se dan a continuación. Como puede ver, si dos elementos que deben eliminarse se siguen directamente entre sí, el segundo no se elimina.Eliminar elementos de una lista que contiene caracteres específicos

Estoy seguro de que hay una manera muy fácil de hacer esto en python, así que si alguien lo sabe, por favor, ayúdenme - Actualmente estoy haciendo una copia de la lista completa e iterando sobre una, y eliminando elementos en la otra ... No es una buena solución asumo

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

lo descubrió:

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

todavía les gustaría saber si hay alguna manera de establecer la iteración hacia atrás un juego cuando se utiliza para x en l aunque.

+0

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

+0

Acepte la respuesta que le ayudó a resolver su problema en lugar de agregar "Resuelto" al título. Haga clic en la marca de verificación verde al lado de una respuesta para aceptarlo. (Si ninguna de las respuestas lo ayudó, por favor agregue una respuesta suya explicando cómo resolvió el problema.) Gracias, y bienvenidos a Stack Overflow. –

Respuesta

35

listas por comprensión:

>>> 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 he entendido bien,

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

podrían hacer el trabajo.

+1

No es compatible con el estilo flake8. Me sale un error: 'SashaListComprehension.py:70:45: la prueba E713 para membresía debe ser 'no en'. Para flake8 necesitamos 'if" 2 "not' como [** MattH answer **] (https://stackoverflow.com/a/3416473/5951529), no' if not "2" '. Gracias. –

+1

@ СашаЧерных, gracias, he editado la respuesta – loevborg

0

El problema que podrías tener es que estás tratando de modificar la secuencia al mismo tiempo que lo repites para t loop.

Cuestiones relacionadas