首页 > 编程语言 >6、Python如何统计序列中元素的频度

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

时间:2024-09-10 09:23:55浏览次数:3  
标签:Python res Counter countRes print 频度 序列 data 字典

有一个列表如下:

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个元素。

标签:Python,res,Counter,countRes,print,频度,序列,data,字典
From: https://blog.csdn.net/qq_40609533/article/details/142084946

相关文章

  • 【pytorch(cuda)】基于DQN算法的无人机三维城市空间航线规划(Python代码实现)
       ......
  • 【负荷预测】【没发表过论文】基于VMD-CNN-BiLSTM-Attention的负荷预测研究(Python代码
      ......
  • Introduction to data Science with Python
    FINALASSESEMENT.IntroductiontodataSciencewithPythonGeneralInstructionsThisisthefinalassessmentforthecourse.Youneedtodownloadthedatasetsprovidedtoanswerthequestions.The5datasetsnamed'World_Happiness_Report'(there......
  • python 实现gamma 伽玛功能算法
    gamma伽玛功能算法介绍Gamma(伽玛)功能算法通常与不同的领域和应用相关,包括但不限于图像处理、光学测试、数学计算等。以下是根据您提供的搜索结果,对Gamma伽玛功能算法的一些概述:在图像处理中的Gamma校正在图像处理中,Gamma校正是一种用于调整图像亮度的方法,特别是为了校正......
  • python 实现gaussian高斯算法
    gaussian高斯算法介绍高斯算法(Gaussianalgorithm)是一个广泛的概念,因为“高斯”这个名字与许多不同的数学和算法技术相关联。但是,在大多数情况下,当人们提到“高斯算法”时,他们可能是在指高斯消元法(Gaussianelimination),这是一种在数学中用于求解线性方程组、计算矩阵的行列......
  • 中文关键字检索分析-导出到csv或者excel-多文件或文件夹-使用python和asyncio和pandas
    1.02版本把原来的tab一个个拼接成文件输出,改成pandas的dataframe使用asyncio库来使用协程,但是测试下来速度好像是差不多的。可能速度太快了,没能很好的测出来差异。原来的最初的代码是java版本的,现在用python重写一遍java版本使用completableFuture来异步IO,主要是文件输......
  • python编译安装亲测
    yumgroupinstall"DevelopmentTools"yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-devellibffi-devellscd/opt/lsmkdirpythoncdpython/  ls  wgethttps://www.python.org/ftp/python/3......
  • 类实现序列化接口后自动生成序列化ID
    1、为什么要实现序列化接口?在Java中,Serializable是一个标记接口(markerinterface),它本身并不包含任何方法。当一个类实现了Serializable接口,意味着这个类的对象可以被序列化,即可以转换为字节流,从而可以通过网络传输或者保存到磁盘上。为了保证序列化对象的唯一性以及版本控......
  • python的迭代器和生成器?
    python中的迭代器和生成器都是用来处理数据序列的。迭代器迭代器是一个可以记住遍历位置的对象,使用iter()创建一个迭代器,使用next()方法依次返回迭代器中的每一个元素,如果数组里面的数据已经遍历完了,就会抛出StopIteration异常list=[2,9,34,56,78,3,6,8,3,67]创建迭代器:it=it......
  • 2389. 和有限的最长子序列
    题目链接2389.和有限的最长子序列思路贪心+排序+二分题解链接非暴力做法:前缀和+二分查找+原地O(1)空间(Python/Java/C++/Go)关键点1.贪心:由于元素和有上限,为了能让子序列尽量长,子序列中的元素值越小越好。2.本题要求计算元素和,因此元素在数组中的位置无......