首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何统计无序列表中元素的出现频率?

如何统计无序列表中元素的出现频率?
EN

Stack Overflow用户
提问于 2010-01-29 20:08:21
回答 34查看 582.8K关注 0票数 263

我需要找到无序列表中元素的频率

代码语言:javascript
复制
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]

输出->

代码语言:javascript
复制
b = [4,4,2,1,2]

此外,我还想从一个

代码语言:javascript
复制
a = [1,2,3,4,5]
EN

回答 34

Stack Overflow用户

回答已采纳

发布于 2010-01-29 20:18:39

注意:在使用 groupby**.**之前,应对列表进行排序

如果列表是有序列表,则可以使用itertools包中的groupby

代码语言:javascript
复制
a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
from itertools import groupby
[len(list(group)) for key, group in groupby(a)]

输出:

代码语言:javascript
复制
[4, 4, 2, 1, 2]

更新:请注意,排序需要O(n log(n))时间。

票数 169
EN

Stack Overflow用户

发布于 2010-01-29 21:02:41

在Python2.7(或更高版本)中,可以使用collections.Counter

代码语言:javascript
复制
import collections

a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
counter=collections.Counter(a)

print(counter)
# Counter({1: 4, 2: 4, 3: 2, 5: 2, 4: 1})

print(counter.values())
# [4, 4, 2, 1, 2]

print(counter.keys())
# [1, 2, 3, 4, 5]

print(counter.most_common(3))
# [(1, 4), (2, 4), (3, 2)]

print(dict(counter))
# {1: 4, 2: 4, 3: 2, 5: 2, 4: 1}

如果你使用的是Python2.6或更早的版本,你可以下载here

票数 594
EN

Stack Overflow用户

发布于 2012-03-17 04:44:02

Python 2.7+引入了字典理解。从列表中构建字典将为您提供计数并消除重复项。

代码语言:javascript
复制
>>> a = [1,1,1,1,2,2,2,2,3,3,4,5,5]
>>> d = {x:a.count(x) for x in a}
>>> d
{1: 4, 2: 4, 3: 2, 4: 1, 5: 2}
>>> a, b = d.keys(), d.values()
>>> a
[1, 2, 3, 4, 5]
>>> b
[4, 4, 2, 1, 2]
票数 115
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2161752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档