Come si rimuove un elemento da un elenco se corrisponde a una sottostringa?Rimozione di un elemento dall'elenco corrispondente a una sottostringa - Python
Ho provato a rimuovere un elemento da un elenco utilizzando il metodo pop()
e enumerate
ma sembra che io mi manca alcuni elementi contigui che deve essere rimosso:
sents = ['@$\tthis sentences needs to be removed', 'this doesnt',
'@$\tthis sentences also needs to be removed',
'@$\tthis sentences must be removed', 'this shouldnt',
'# this needs to be removed', 'this isnt',
'# this must', 'this musnt']
for i, j in enumerate(sents):
if j[0:3] == "@$\t":
sents.pop(i)
continue
if j[0] == "#":
sents.pop(i)
for i in sents:
print i
uscita:
this doesnt
@$ this sentences must be removed
this shouldnt
this isnt
#this should
this musnt
output desiderato:
this doesnt
this shouldnt
this isnt
this musnt
Caso classico di rimozione di elementi da un elenco mentre si sta iterando su tale elenco. Leggi le dozzine di altre domande relative allo Stack Overflow correlate a questo. Inoltre, consultare la [nota nei documenti] (http://docs.python.org/reference/compound_stmts.html#for). –
si dovrebbe sempre evitare di cambiare la lunghezza di un contenitore mentre si scorre attraverso di esso, questa è una ricetta per il disastro – wim
In generale, di solito è meglio creare un nuovo elenco filtrato piuttosto che provare a modificare un elenco sul posto. Gli algoritmi immutabili sono sempre più facili da ragionare (anche se non sempre è più facile capire come scrivere). Quando stai solo sostituendo i valori, a volte il guadagno in termini di efficienza del lavoro sul posto lo supera, ma quando stai eliminando o inserendo nel mezzo di un elenco, ottieni solitamente efficienza _worse_ insieme alla tua logica meno solida. – abarnert