如何对列表中的重复float值求和并将结果存入新列表
实现方法
方案1:Python 3.7+ 原生字典实现(推荐)
Python 3.7及以上版本中字典默认保留元素插入顺序,直接遍历列表累加相同值即可:
listA = [1.356, 7.663, 12.466, 1.356, 7.663, 12.466, 1.356, 7.663, 12.466] sum_dict = {} for num in listA: sum_dict[num] = sum_dict.get(num, 0) + num listB = list(sum_dict.values()) # 输出结果:[4.068, 22.989, 37.398]
方案2:兼容旧版本Python(3.7以下)
如果使用3.7以下版本Python,原生字典不保序,可借助collections.OrderedDict保证输出顺序和元素首次出现顺序一致:
from collections import OrderedDict listA = [1.356, 7.663, 12.466, 1.356, 7.663, 12.466, 1.356, 7.663, 12.466] sum_dict = OrderedDict() for num in listA: sum_dict[num] = sum_dict.get(num, 0) + num listB = list(sum_dict.values())
注意事项
如果列表中的浮点数是运算生成的,可能存在精度误差导致表面数值相同的浮点数实际存储值不同,可先将数值舍入到对应精度作为统计key:
sum_dict = {} precision = 3 # 按实际数据的小数位数调整 for num in listA: key = round(num, precision) sum_dict[key] = sum_dict.get(key, 0) + num listB = list(sum_dict.values())
内容的提问来源于stack exchange,提问作者Hondros
相关产品推荐
相关产品推荐

