簡體   English   中英

什么是計算列表中元素出現的pythonic方法?

[英]what's the pythonic way to count the occurrence of an element in a list?

這就是我做的。 在python中有更好的方法嗎?

for k in a_list:   
  if kvMap.has_key(k):
    kvMap[k]=kvMap[k]+1   
  else:
    kvMap[k]=1

謝謝

使用defaultdict

from collections import defaultdict
kvmap= defaultdict(int)
for k in a_list:
    kvmap[k] += 1

單個元素:

a_list.count(k)

所有元素:

counts = dict((k, a_list.count(k)) for k in set(a_list))

我不知道,它基本上對我來說很好。 您的代碼簡單易讀,這是我認為pythonic的重要組成部分。

你可以修剪它有點像:

for k in a_list:
     kvMap[k] = 1 + kvMap.get(k,0)

這么老的問題,但考慮到添加到defaultdict(int)是如此常見的用途, collections有一個特殊的名稱(因為Python 2.7)應該不足為奇

>>> from collections import Counter
>>> Counter([1, 2, 1, 1, 3, 2, 3, 4])
Counter({1: 3, 2: 2, 3: 2, 4: 1})
>>> Counter("banana")
Counter({'a': 3, 'n': 2, 'b': 1})

另一個解決方案利用setdefault():

for k in a_list:
    kvMap[k] = kvMap.setdefault(k, 0) + 1

如果您的列表已排序,另一種方法是使用itertools.groupby 這可能不是最有效的方法,但它仍然很有趣。 它返回項目>計數的字典:

>>> import itertools
>>> l = [1,1,2,3,4,4,4,5,5,6,6,6,7]
>>> dict([(key, len([e for e in group]))
          for (key, group)
          in itertools.groupby(l)])
{1: 2, 2: 1, 3: 1, 4: 3, 5: 2, 6: 3, 7: 1}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM