You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.x中以list1为索引聚合list2元素的实现问题

解决按索引求和的问题

嘿,作为Python新手能想到用zip()把两个列表配对已经很棒啦!接下来其实很简单,咱们一步步来实现:

思路拆解

  1. 先确定最终列表final的长度:要覆盖list1里出现的最大索引,所以取max(list1) + 1,这样能包含从0到最大索引的所有位置,初始值都设为0.0。
  2. 遍历你已经组合好的new列表,每一组是(索引, 对应浮点数),把浮点数加到final对应索引的位置上就行。

完整代码实现

list1 = [1, 2, 2, 2, 3, 5]
list2 = [0.0, 2.0, 3.0, 1.0, 4.0, 3.0]

# 用zip组合两个列表
new = zip(list1, list2)

# 确定final的长度:最大索引+1,初始全为0.0
max_index = max(list1)
final = [0.0] * (max_index + 1)

# 遍历每一组,累加对应索引的值
for idx, num in new:
    final[idx] += num

print(final)  # 输出: [0.0, 0.0, 6.0, 4.0, 0.0, 3.0]

代码解释

  • max(list1)找到list1里最大的索引是5,所以final的长度是6,初始是[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]。
  • 循环里的idx是list1的元素(也就是要存到final的索引),num是list2对应位置的浮点数,每次把num加到final[idx]上,就完成了累加。
  • 因为list1里没有0和4,所以final这两个位置保持初始的0.0,正好符合你要的结果!

额外小技巧(可选)

如果以后遇到更复杂的类似需求,也可以用Python的collections.defaultdict来实现,代码会更简洁:

from collections import defaultdict

list1 = [1, 2, 2, 2, 3, 5]
list2 = [0.0, 2.0, 3.0, 1.0, 4.0, 3.0]

sum_dict = defaultdict(float)
for idx, num in zip(list1, list2):
    sum_dict[idx] += num

# 把字典转换成要求的列表,覆盖所有0到最大索引的位置
max_index = max(list1)
final = [sum_dict.get(i, 0.0) for i in range(max_index + 1)]

print(final)  # 同样输出正确结果

这个方法先用字典存每个索引的累加值,最后再转成列表,适合索引不连续或者范围很大的情况~

内容的提问来源于stack exchange,提问作者microjrm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:25:42