2

我有以下数字列表:

l = [2L, 14L, 14L, 14L, 11L, 2L, 2L, 11L, 14L, 11L, 14L, 2L, 2L, 14L, ...]

我如何找出一个数字(例如,2)或多个数字(例如,257)的出现次数?

我打算这样做的方式是使用for循环,但我确信有一种更有效的方式。

4

3 回答 3

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
于 2013-03-07T23:42:22.260 回答
5
>>> l.count(2)
5

像馅饼一样简单。如果您有一个想要查找计数的数字列表,您可以尝试,例如:

>>> {n: l.count(n) for n in [2, 5, 7]}
{2: 5, 5: 0, 7: 0}

如果您想要对所有元素进行计数,我会建议collections.Counter,如另一个答案中所述。

于 2013-03-07T23:42:47.793 回答
1

Collections.Counter在 py2.7 中引入,因此对于 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})
于 2013-03-07T23:55:05.547 回答