python - 累计计算列表中每个元素的出现次数
问题描述
我有一个清单:
selection_list=[3, 2, 3, 2, 2, 2]
我想累计计算每个元素的出现次数,我希望输出为:
['1/2', '1/4' , '2/2', '2/4', '3/4', '4/4'] # 1/2 means: first occurrence of two
dico={'selection':[], 'Number':[]}
l=[]
keys=[]
for i in range(len(selection_list)):
dico['selection'].append(selection_list[i])
#counting the total occurrences of each element
occurrences = collections.Counter(selection_list)
for i in occurrences.keys():
keys.append(i)
#indexes of each element of the list
for j in range(len(keys)):
l.append([i for i,val in enumerate(selection_list) if val==keys[j]])
for i in range(len(l)):
for j in l[i] :
dico['Number'].insert(int(j), str(len(l[i]))+'-'+ str(len(l[i])) )
我得到这个输出:
dico={'selection': [2, 3, 2, 3, 3, 3], 'UnfoldingNumber': ['2-2', '4-4', '2-2', '4-4', '4-4', '4-4']}
我错过了什么?
解决方案
这是一个简单的解决方案的示例:
from collections import Counter
selection_list=[3, 2, 3, 2, 2, 2]
numerator = {i:0 for i in set(selection_list)}
denominator = Counter(selection_list)
result = []
for v in selection_list:
numerator[v] += 1
result.append(str(numerator[v]) + '/' + str(denominator[v]))
print(result)
推荐阅读
- python - 维护两个相同类型对象的优先级队列,每个队列具有不同的排序属性
- java - 杂货账单计划
- performance-testing - 斜坡和持有用户一段时间,然后再次斜坡
- python - 使用 Selenium Python 从 Chrome 获取 console.log 输出
- java - 构建 jar 文件但(dockerize)Spring Boot 应用程序启动
- networking - 在没有 yum(或任何其他软件包管理软件)的情况下在 RHEL 上安装 net-snmp
- ios - 为什么我不能在 Swift 中多次找到相同的关键字?
- arrays - 选择numpy数组元素
- inheritance - 我正在使用 Odoo 13,并且我已经从 odoo 12 安装了一个模块
- docusignapi - Docusign - 将 PDF 文本字段转换为 initialHereTab