2010-08-05 20 views
17

Voglio rimuovere tutti gli elementi in un elenco che contiene (o non contiene) un insieme di caratteri specifici, tuttavia sto correndo per problemi di iterazione sull'elenco e rimozione di elementi come Vado. Di seguito sono riportati due esempi praticamente uguali di questo. Come puoi vedere, se due elementi che dovrebbero essere rimossi si susseguono l'un l'altro, il secondo non viene rimosso.Rimozione di elementi da un elenco contenente caratteri specifici

Sono sicuro che ci sia un modo molto semplice per farlo in Python, quindi se qualcuno lo conosce, per favore aiutatemi - sto facendo una copia dell'intero elenco e iterando su uno, e rimuovendo gli elementi nell'altro ... Non è una buona soluzione presumo

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

capito:

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

vorrebbe ancora sapere se c'è qualche modo per impostare l'iterazione indietro di un set quando si utilizza per la x in l anche se.

+0

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

+0

Si prega di accettare la risposta che ti ha aiutato a risolvere il tuo problema invece di aggiungere "Risolto" per il titolo. Fare clic sul segno di spunta verde accanto a una risposta per accettarlo. (Se nessuna delle risposte ti ha aiutato, per favore aggiungi una tua risposta spiegando come hai risolto il problema.) Grazie e benvenuti a Stack Overflow. –

risposta

35

di lista:

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

Se ho capito bene,

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

potrebbero fare il lavoro.

+1

Non è compatibile con lo stile flake8. Ottengo un errore: 'SashaListComprehension.py:70:45: il test E713 per l'iscrizione dovrebbe essere 'not in''. Per flake8 abbiamo bisogno di "if" 2 "not' come [** MattH answer **] (https://stackoverflow.com/a/3416473/5951529), non di" se non "2" '. Grazie. –

+1

@ СашаЧерных, grazie, ho modificato la risposta – loevborg

0

Il problema che si potrebbe avere è che si sta tentando di modificare la sequenza l stesso tempo in cui si esegue il ciclo su di esso per il ciclo t.

Problemi correlati