Questo è qualcosa che mi ha infastidito per un po 'e non riesco a capire perché qualcuno vorrebbe che la lingua si comporti in questo modo:
In [1]: foo = [1, 2, 3]
In [2]: foo.remove(2) ; foo # okay
Out[2]: [1, 3]
In [3]: foo.remove(4) ; foo # not okay?
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/izkata/<ipython console> in <module>()
ValueError: list.remove(x): x not in list
Se il valore non è già presente nell'elenco, mi aspetterei un successo silenzioso. Obiettivo già raggiunto. C'è una ragione per cui questo è stato fatto in questo modo? Importa codice scomodo che dovrebbe essere molto più breve:
for item in items_to_remove:
try:
thingamabob.remove(item)
except ValueError:
pass
Invece di semplicemente:
for item in items_to_remove:
thingamabob.remove(item)
Per inciso, no, non posso usare set(thingamabob).difference(items_to_remove)
perché I do deve mantenere sia l'ordine che i duplicati.