Python如何统计列表中多个指定项的出现频率并输出对应相对频率
Python 无额外模块实现列表元素频率统计
需求说明:给定textList和searchFor两个列表,按searchFor的元素顺序统计每个元素在textList中的出现次数,结果存入frequencyList对应位置,不允许导入任何额外模块。
方法1:小数据量场景(简洁写法)
直接通过列表推导式配合列表原生count()方法实现,代码简洁易读:
textList = ['a','b','a','c'] searchFor = ['a','b'] frequencyList = [textList.count(item) for item in searchFor]
- 执行结果:
frequencyList = [2, 1],完全符合要求 - 注意:该方法每次调用
count()都会遍历一次textList,适合textList长度较小的场景
方法2:大数据量场景(高效写法)
预先生成textList的元素计数字典,仅需遍历textList一次,后续直接按searchFor顺序取值即可,时间复杂度更低:
textList = ['a','b','a','c'] searchFor = ['a','b','d'] # 预统计所有元素出现次数 count_dict = {} for item in textList: count_dict[item] = count_dict.get(item, 0) + 1 # 按searchFor顺序生成结果,不存在的元素返回0 frequencyList = [count_dict.get(item, 0) for item in searchFor]
- 执行结果:
frequencyList = [2, 1, 0],自动兼容searchFor包含textList不存在元素的场景 - 优势:时间复杂度为
O(len(textList) + len(searchFor)),大数据量下性能远优于方法1
内容的提问来源于stack exchange,提问作者Jack Krebs
相关产品推荐
相关产品推荐

