python【3】-统计序列中元素出现的次数(频度)

本文介绍两种统计方法:一种是统计列表中元素出现的频率并找出最常见的元素;另一种是利用正则表达式处理文本,统计单词出现的次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例 

1. 统计列表中[1,1,2,22,3,3,-2,3,-34]出现次数最高的元素,并统计出现的次数

2 统计英文文章中单词的频度。

对于问题1 :

首先生成随机列表

from random import randint
l1=[randint(-10,10) for x in range(30)]
print(l1)

 

统计列表中元素出现的次数  比如 数字1 出现3次 就记录为1:3  很自然的想到使用字典来存储。即:

方法1:

把列表 l1 作为键,把出现的次数作为值  ,传入字典  。 使用字典的fromkeys方法 。这是fromkeys的菜鸟教程链接

http://www.runoob.com/python/att-dictionary-fromkeys.html

 dict.fromkeys(l1,0) 。把需要统计的序列(l1)作为第一个参数传入fromkeys,0 作为初始值,

使用循环遍历,每找个一个元素,就在这个元素的值后面加1 即:

from random import randint
l1=[randint(-10,10) for x in range(30)]
print(l1)
c=dict.fromkeys(l1,0)
for one in l1:
    c[one]+=1
print(c)

输出结果为 :

 

而在方法1中,只是得到了每一个元素出现的次数,并没有得到初选次数最多的3个元素,那么该如何做呢?

  一 。根据字典中的值对字典的键进行排序,请看这篇笔记  :按照字典的值对字典进行排序

 

 

方法2:专门处理计数问题的方法  。使用collections.Counter方法。首先导入collections类  

    使用Counter的most_common()方法。

导入Counter,将生产的随机列表作为参数传入到Counter构造器中,会得到一个这样的结果,对结果使用most_common()得到出现次数前几的元素 

Counter({-8: 4, -2: 4, -1: 3, -4: 3, 2: 2, 4: 2, 7: 2, -9: 2, 0: 1, 3: 1, 5: 1, 6: 1, 9: 1, 10: 1, -10: 1, -7: 1})

from collections import Counter
l2=Counter(l1)
print(l2.most_common(3))

代码输出:

 

 

对于问题2  统计英文单词的词频

需要使用re模块 里面的正则表达式 impor re

import re
with open(r'D:\software\Notepad++\readme.txt','r') as file:  #打开文件 统计readme.txt中的单词词频
    txt=file.read()   #把文件读取的内容变成字符串 ,因为re,split 方法的参数接受的是字符串 而不是列表
 l3=re.split('\W+',txt)     #  \W+是把字符串按照非字母的来分隔 
 l4=Counter(l3)  
 print(l4.most_common(10)) 

结果如下:

 

 

### Python中计算列表中特定元素数量的方法 在Python中,有多种方式可以用来计算列表中特定元素的数量。一种简单而有效的方式是利用`count()`方法,该方法返回指定元素在列表中出现的次数。 对于更复杂的需求或当处理的数据结构较为特殊时,则可能需要用到其他技术手段。例如,可以通过列表推导式结合条件判断来实现这一目标[^2]。下面给出几种同的解决方案: #### 方法一:使用 `count()` 这是最直接也是最容易理解的一种做法。只需要调用列表对象自带的`count()`方法即可完成任务。 ```python my_list = ['apple', 'banana', 'orange', 'apple'] target_element = 'apple' occurrences = my_list.count(target_element) print(f"'{target_element}' occurs {occurrences} times.") ``` 这种方法适用于大多数情况下简单的元素计数需求。 #### 方法二:使用列表推导式条件表达式 此法灵活性更高一些,尤其适合于那些需要额外逻辑判断的情况。通过创建一个新的布尔值列表并对其求和,也可以达到相同的效果。 ```python my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] condition = lambda x: x == 5 count = sum(1 for element in my_list if condition(element)) print(count) ``` 这里定义了一个匿名函数作为筛选条件,并将其应用于每一个列表项上;最终的结果即为符合条件项目的总数。 #### 方法三:使用第三方库 `statistics` 虽然这个例子主要针对的是数值型数据集的操作,但是它展示了如何借助外部模块的力量来进行更加复杂的统计分析工作。过需要注意的是,在仅仅为了统计某单一元素频率的情况下引入整个库显得有些大材小用了。 ```python import statistics as st sequence = [1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9, 10] frequency_of_five = len([num for num in sequence if num == 5]) mean_frequency = frequency_of_five / len(sequence) print(f"The number of fives is {frequency_of_five}, and its relative frequency (mean) is approximately {mean_frequency:.2f}.") ``` 上述代码片段统计数字'5'在整个序列里出现了多少次,还进一步计算出了其相对频度(均值)。当然这一步骤并非总是必要的,视具体应用场景而定。 综上所述,根据实际问题的特点选择合适的技术方案是非常重要的。对于单纯想要知道某个固定值在一个给定范围内重复了多少回的情形来说,推荐优先考虑内置的`count()`功能,因为它既高效又易于维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值