如何删除列表重复元素并按索引对另一列表对应值取均值
实现代码
以下给出两种适用不同场景的Python实现:
场景1:重复元素可非连续(通用方案)
不管list1中重复元素是否连续出现,都会将所有相同元素对应的list2值合并计算均值,保留元素第一次出现的顺序:
from collections import defaultdict list1 = [1200,1200,1200,2000] list2 = [12000,14000,13000,30000] value_map = defaultdict(list) key_order = [] for key, val in zip(list1, list2): if key not in value_map: key_order.append(key) value_map[key].append(val) list1new = key_order # 如需整数结果可套int()转换:int(sum(value_map[k])/len(value_map[k])) list2new = [sum(value_map[k])/len(value_map[k]) for k in key_order]
运行后输出和示例预期完全一致:list1new = [1200, 2000]list2new = [13000.0, 30000.0]
场景2:重复元素连续出现
如果你的list1中相同元素都是连续排列的(和示例一致),可以用itertools.groupby实现更简洁的写法:
from itertools import groupby list1 = [1200,1200,1200,2000] list2 = [12000,14000,13000,30000] list1new = [] list2new = [] for key, group in groupby(zip(list1, list2), key=lambda x: x[0]): vals = [item[1] for item in group] list1new.append(key) list2new.append(sum(vals)/len(vals))
补充说明
- 如果需要更规范的均值计算,可以导入
statistics模块的mean函数替换手动求和除长度的写法 - 两种方案都保留了
list1元素第一次出现的顺序,不会打乱原有排列逻辑
内容的提问来源于stack exchange,提问作者Nick Brazil
相关产品推荐
相关产品推荐

