我有以下数字列表:
l = [2L, 14L, 14L, 14L, 11L, 2L, 2L, 11L, 14L, 11L, 14L, 2L, 2L, 14L, ...]
我如何找出数字(例如2
)或多个数字(例如2
或5
或7
)的出现次数?
我要做的就是使用for
循环,但我确信这是一种更有效的方法。
答案 0 :(得分:5)
collections.Counter
创建一个字典,将值映射到它们出现的次数:
>>> from collections import Counter
>>> l = [2L, 14L, 14L, 14L, 11L, 2L, 2L, 11L, 14L, 11L, 14L, 2L, 2L, 14L]
>>> c = Counter(l)
>>> c
Counter({14L: 6, 2L: 5, 11L: 3})
>>> c[14L]
6
答案 1 :(得分:5)
>>> l.count(2)
5
简单如馅饼。如果您有可以尝试的数字列表,您可以尝试,例如:
>>> {n: l.count(n) for n in [2, 5, 7]}
{2: 5, 5: 0, 7: 0}
如果您想要所有元素的计数,我会建议collections.Counter
,如其他答案所述。
答案 2 :(得分:1)
Collections.Counter
,因此对于py 2.6及更早版本,您可以尝试这样的事情:
In [1]: l = [2L, 14L, 14L, 14L, 11L, 2L, 2L, 11L, 14L, 11L, 14L, 2L, 2L, 14L]
In [2]: dic={}
In [3]: for x in l:
...: dic[x]=dic.get(x,0)+1
...:
In [4]: dic
Out[4]: {2L: 5, 11L: 3, 14L: 6}
或使用defaultdict
(在py2.5中引入):
In [6]: from collections import defaultdict
In [7]: dic=defaultdict(int)
In [8]: for x in l:
dic[x]+=1
...:
In [9]: dic
Out[9]: defaultdict(<type 'int'>, {2L: 5, 11L: 3, 14L: 6})