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

如何对源自同一二维列表的多个列表按索引求和?

解决多列表按索引求和的问题

嘿,这个问题我之前处理类似需求时也碰到过!你的思路其实已经找对方向了——确实可以用zip相关的工具来搞定,不过因为你的列表长度不一样,得用itertools.zip_longest代替默认的zip,不然只会处理到最短列表的长度,后面的索引就被忽略啦。

具体步骤:

  1. 把拆分后的列表整合到一个大列表中
    既然这些列表源自同一个二维列表,其实直接用原二维列表就行;如果已经拆分到单独变量里,把它们放到一个列表里就好,比如:

    list1 = [0, 0, 0, 0, 0, 3, 3, 3]
    list2 = [0, 0, 0, 0, 2, 0, 0, 0, 2]
    list3 = [0, 0, 0, 1, 0, 0, 0, 0, 0, 1]
    list4 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    list5 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1]
    list6 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, -2]
    list7 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, -3, -3]
    
    # 整合到一个大列表
    all_lists = [list1, list2, list3, list4, list5, list6, list7]
    
  2. 用zip_longest配合列表推导式求和
    导入itertools里的zip_longest,它会自动给长度不足的列表补指定值(这里补0,因为缺的位置相当于加0不影响求和),然后对每个索引位置的元素求和:

    from itertools import zip_longest
    
    # 按索引求和得到新列表
    summed_result = [sum(items) for items in zip_longest(*all_lists, fillvalue=0)]
    

为什么这么做?

  • zip_longest(*all_lists, fillvalue=0)会把所有列表相同索引位置的元素打包成元组,比如第一个元组是(0,0,0,0,0,0,0),第5个索引的元组是(3,0,0,0,0,0,0),长度不够的列表会用fillvalue=0填充,确保每个索引位置都能覆盖到所有列表。
  • 然后用sum(items)对每个元组里的元素求和,就得到了对应索引的总和,最终生成的summed_result就是你要的按索引求和后的新列表。

举个小例子验证:比如索引11的位置,只有list5有值-1,其他都是0,求和后就是-1;索引13的位置只有list7有-3,求和后就是-3,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:43:32