如何从Python列表中获取唯一值及其出现次数?
我有一个列表,里面有重复的项目,我想要一个只包含独特项目及其出现次数的列表。
比如,我有 ['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)]