2011-03-13 93 views
0

可能重複:
Remove all occurences of a value from a Python list如何刪除列表中的所有實例名稱?

mylist = ['dogs', 'cats', 'cats'] 

如果鍵入mylist.remove('cats'),它刪除只有一個我的列表中的貓,但我要刪除我的列表中所有的貓都沒有循環,因爲循環會以我想要的方式崩潰。

編輯:這是一個小技巧來解釋,例如,它會崩潰,因爲我試圖開發一個模塊從列表中刪除相同的元素。 mylist [i]首先返回狗,我將它刪除,但經過另一個循環後,mylist [i]不再返回狗,而是貓。這就是爲什麼我想要刪除單個語句中的所有實例,而不管索引循環如何。

+3

「循環會以我想要的方式崩潰」是什麼意思? – Gabe 2011-03-13 01:07:16

+2

什麼? – 2011-03-13 01:07:44

回答

6

您可以創建一個新的列表與列表理解,以避免外在的循環:

mylist = [item for item in mylist if item != 'cats'] 
+0

請注意,如果你想修改列表就地,你可以做一個'mylist [:] = ...'在一個小的成本效率(一個額外的副本)。 – 2011-03-13 01:19:57

1

沒有從列表中刪除所有元素的內置方法。你必須使用循環。出了什麼問題:

In [129]: x=['dog','cat','cat'] 
In [136]: [elt for elt in x if elt!='cat'] 
Out[136]: ['dog'] 

0

除非提供的列表副本必須修改就地,我會建議過濾器。

>>> x = itertools.ifilter(lambda x: x != 'foo', ['foo', 'foo', 'bar']) 
>>> x 
<itertools.ifilter object at 0xb70ba2ec> 
>>> list(x) 
['bar'] 
+1

列表解析(或生成器表達式)在Python中更清晰更習慣。 – 2011-03-13 01:18:51

相關問題