這是我的代碼:從Python列表中刪除每個值的某個值?
a = [1,2,3,43,43,43]
count = a.count(43)
if count > 0:
for i in range(count):
a.remove(43)
print a
有沒有一種簡單的方法來實現這一目標?
這是我的代碼:從Python列表中刪除每個值的某個值?
a = [1,2,3,43,43,43]
count = a.count(43)
if count > 0:
for i in range(count):
a.remove(43)
print a
有沒有一種簡單的方法來實現這一目標?
嘗試
a = [x for x in a if x != 43]
嘗試itertools
:
>>> import itertools
>>> a = [1, 2, 3, 43, 43, 45]
>>> iter = itertools.ifilter(lambda x: x != 43, a)
>>> list(iter)
[1, 2, 3]
通常,列表理解和生成器表達式更好。 – minhee 2011-04-11 06:36:08
是的,我同意:) – 2011-04-11 06:37:04
'itertools'是建立在標準生成器工具上的一組不錯的工具。這是非常有用的,但我認爲這個具體問題有點矯枉過正。 – 2011-04-11 06:39:03
是你只想刪除列表中的所有a
43S什麼?
a = [x for x in a if x != 43]
那裏有小字謎嗎?它不應該是'[x for a ...而不是'[a for a x in a ...']嗎? – 2011-04-11 06:37:40
是的,你是對的。我編輯過。 – minhee 2011-04-11 06:41:33
請注意,上述所有的解決方案(除了一個用刪除,而是一個具有非線性執行時間)將創建一個新的列表,而不是修改原來的到位。這可能會或可能不會成爲你的情況的問題。如果要修改原始列表,則必須使用切片分配,例如:
a[:] = [value for value in a if value != 43]
這裏爲什麼需要分片分配? – 2011-04-11 22:07:04
正如我在代碼上面的註釋中所說的那樣,這是如果您想要修改原始列表。如果列表作爲函數中的參數傳遞,並且您希望該函數具有修改調用程序所看到的列表的副作用,這可能很重要。 – 2011-04-12 12:40:59
+1啊,好榜樣! – 2011-04-13 05:44:05
這也不是一個很好的算法。每次你執行'a.remove(43)'時,Python都會從列表的開頭再次開始,所以你一遍又一遍地測試值[1,2,3]。在大O標記中,這是O(n^2)。下面使用簡單的列表理解的答案是O(n) – 2011-04-11 07:01:50