2013-10-06 40 views
4

對象我有櫃檯的簡單列表:刪除空計數器()從列表

> counter_list 
Counter({'Pig': 1}), Counter(), Counter({'Chicken': 3}) 

我似乎無法找到一個簡單的方法來刪除空計數器。

我一直在使用

counter_list += Counter() 

按照文檔試過,沒有運氣。

del 

似乎只刪除一個計數器,而不是實際計數器的內容,充其量只是創建更多的空櫃檯。

任何建議表示讚賞,並提前道歉未來的額頭 - 板門手。

+0

是否元素的順序重要嗎? –

+1

沒有順序沒關係。 –

回答

4

使用列表理解來建立一個新的counter_list

counter_list = [item for item in counter_list if item] 

這工作,因爲一個空的櫃檯是Falsish,而一個非空計數器是Truish

In [27]: bool(collections.Counter()) 
Out[27]: False 

In [28]: bool(collections.Counter([1])) 
Out[28]: True 
+1

呵呵,很酷 – tacaswell

+0

如果你只需要遍歷'Counters',跳過空的,那麼列表理解的替代就是使用'filter(None,counter_list)'。在Python 3中,'filter'是一個生成器。 – Blckknght

1

嘗試:

counter_list[:] = (c for c in counter_list if c) 
1

更通用的答案,不依靠item作爲類型「Falseish」(但不承擔它的長度由len理智返回)

counter_list = [item for item in counter_list if len(item) != 0] 
+1

但確實需要的項目有一個長度:) –

+0

@JonClements足夠公平。 – tacaswell