在Python中计算相同值的元素数量

7 投票
4 回答
24787 浏览
提问于 2025-04-16 06:46

可能是重复的问题:
如何计算列表中元素的频率?

我想要统计一个列表中相同值的元素数量,并返回一个字典,内容如下:

> a = map(int,[x**0.5 for x in range(20)])
> a
> [0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4] 

> number_of_elements_by_value(a)
> {0:1, 1:3, 2:5, 3:7, 4:4}

我想这算是一种直方图吧?

4 个回答

4

使用count可以获取列表中某个元素的数量,而对于集合(set)来说,它只会保留唯一的元素:

>>> l = [0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4]
>>> k = [(x, l.count(x)) for x in set(l)]
>>> k
[(0, 1), (1, 3), (2, 5), (3, 7), (4, 4)]
>>> 
>>> 
>>> dict(k)
{0: 1, 1: 3, 2: 5, 3: 7, 4: 4}
>>> 
7

使用一个叫做 Counter 的工具:

>>> from collections import Counter

>>> a = map(int,[x**0.5 for x in range(20)])
>>> a
[0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4] 
>>> c = Counter(a)
>>> c[2]
5
8

如果你没有collections.Counter这个工具的话,这是一种不错的方法。

from collections import defaultdict
d = defaultdict(int)
a = map(int, [x**0.5 for x in range(20)])
for i in a:
    d[i] += 1

print d

撰写回答