Sam*_*een 32 python counter list
我有一个包含重复项目的列表,我想要一个具有频率的唯一项目列表.
例如,我有['a', 'a', 'b', 'b', 'b'],我想要[('a', 2), ('b', 3)].
寻找一种简单的方法来做到这一点,而不需要循环两次.
use*_*019 63
使用Python 2.7+,您可以使用collections.Counter.
否则,请参阅此计数器.
在Python 2.7+下:
from collections import Counter
input = ['a', 'a', 'b', 'b', 'b']
c = Counter( input )
print( c.items() )
Run Code Online (Sandbox Code Playgroud)
输出是:
[('a',2),('b',3)]
Eli*_*sky 11
如果您的项目已分组(即类似的项目汇集在一起),最有效的方法是itertools.groupby:
>>> [(g[0], len(list(g[1]))) for g in itertools.groupby(['a', 'a', 'b', 'b', 'b'])]
[('a', 2), ('b', 3)]
Run Code Online (Sandbox Code Playgroud)
>>> mylist=['a', 'a', 'b', 'b', 'b']
>>> [ (i,mylist.count(i)) for i in set(mylist) ]
[('a', 2), ('b', 3)]
Run Code Online (Sandbox Code Playgroud)
如果您愿意使用第三方库,则NumPy提供了一个便捷的解决方案。如果您的列表仅包含数字数据,这将特别有效。
import numpy as np
L = ['a', 'a', 'b', 'b', 'b']
res = list(zip(*np.unique(L, return_counts=True)))
# [('a', 2), ('b', 3)]
Run Code Online (Sandbox Code Playgroud)
为了理解语法,请注意np.unique此处返回唯一值和计数的元组:
uniq, counts = np.unique(L, return_counts=True)
print(uniq) # ['a' 'b']
print(counts) # [2 3]
Run Code Online (Sandbox Code Playgroud)
另请参见:与常规Python列表相比,NumPy有哪些优势?
| 归档时间: |
|
| 查看次数: |
34374 次 |
| 最近记录: |