6、Python如何统计序列中元素的频度

有一个列表如下:

data = ['a', 'c', 'f', 'b', 'f', 'e', 'k', 'd', 'f', 'k']

如何统计每个元素出现的次数呢?

方案一:使用 List count方法

如果只要知道某一个元素出现的次数,直接使用 List count 方法就可以

data = ['a', 'c', 'f', 'b', 'f', 'e', 'k', 'd', 'f', 'k']
res = data.count('f')
print(res)
# 如果要统计所有的元素,也可以循环处理
res = dict()
for d in data:
    res[d] = data.count(d)
print(res)

方案二:列表循环,使用字典 dict 统计

更上面的循环一个意思,我们有多种方式处理,核心思想都是使用字典存储结果,对列表进行循环,往字典中赋值。下面几种写法给大家开拓一下思路。

countRes = dict()
for d in data:
    if d in countRes:
        countRes[d] += 1
    else:
        countRes[d] = 1
print(countRes)

当然,也可以使用字典的 fromkeys 函数,创建一个新字典

countRes = dict.fromkeys(data, 0)
for d in data:
    countRes[d] += 1
print(countRes)

当然,基本同样的思路,也可以使用 collections.defaultdict 统计。

defaultdict(parameter) 接受一个类型参数,例如:int、float、str 等。

传递进来的类型参数,不是用来约束值的类型,更不是约束键的类型,而是当键不存在时,实现一种值的初始化。

from collections import defaultdict
data = ['a', 'c', 'f', 'b', 'f', 'e', 'k', 'd', 'f', 'k']
countRes = defaultdict(int)
for d in data:
    countRes[d] += 1
print(countRes)

方案三:使用标准库 collections 模块中的 Counter 对象

Counter 是一个容器对象,使用 collections 模块中的 Counter 类可以实现 hash 对象的统计。

Counter 是一个无序的容器类型,以字典的键值对形式存储,其中元素作为 key,其计数作为 value。计数值可以是任意的 Interger(包括0和负数)。

Counter() 对象还有几个可调用的方法:

  • most_common(n) – TOP n 个出现频率最高的元素
  • elements – 获取所有的键 通过list转化
  • update – 增加对象
  • subtrct – 删除对象
  • 下标访问 a[‘xx’] --不存在时返回0

所以,我们可以直接把列表传给Counter获取频度结果,如下:

from collections import Counter
res = Counter(data)
print(res)

还有一个问题说明一下,如果需要找到频度最高或者最低的某几个元素,如何处理?

如果使用字典统计的方式,直接根据字典的值对字典中的项进行排序就可以了,具体可以参考我的这篇文章 Python根据字典中值的大小, 对字典中的项排序;如果使用的是 Counter 对象,也可以使用 most_common 函数获取出现频率最高的n个元素。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值