如何从Python列表中获取唯一值及其出现次数?

42 投票
10 回答
55757 浏览
提问于 2025-04-15 20:05

我有一个列表,里面有重复的项目,我想要一个只包含独特项目及其出现次数的列表。

比如,我有 ['a', 'a', 'b', 'b', 'b'],我想要的结果是 [('a', 2), ('b', 3)]

我希望能找到一种简单的方法来实现这个,而不需要循环两次。

10 个回答

15

这段代码的作用是……

首先,它会做一些初始化的工作,比如设置变量的初始值。接着,它会进入一个循环,这个循环会一直运行,直到满足某个条件为止。在循环中,它会执行一些操作,比如计算、判断等。

最后,当条件满足时,循环会停止,程序会继续执行后面的代码。这段代码的结构很常见,很多程序都会用到类似的方式来处理重复的任务。

总的来说,这段代码就是在不断地重复某些操作,直到达到预定的目标。

>>> mylist=['a', 'a', 'b', 'b', 'b']
>>> [ (i,mylist.count(i)) for i in set(mylist) ]
[('a', 2), ('b', 3)]
74

在Python 2.7及以上版本中,你可以使用collections.Counter这个工具。

如果你使用的版本不支持,可以看看这个计数器的做法

在Python 2.7及以上版本中:

from collections import Counter
input =  ['a', 'a', 'b', 'b', 'b']
c = Counter( input )

print( c.items() )

输出结果是:

[('a', 2), ('b', 3)]

15

如果你的物品是分组的(也就是说,相似的物品会聚在一起),那么最有效的方法就是使用 itertools.groupby

>>> [(g[0], len(list(g[1]))) for g in itertools.groupby(['a', 'a', 'b', 'b', 'b'])]
[('a', 2), ('b', 3)]

撰写回答