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

Python实现:按tuple分组对四整数list对应索引值求和

按Tuple分组并对对应列表逐索引求和

我有一个大型的子列表集合,每个子列表由一个tuple和一个包含4个整数的list组成。需要生成一个包含唯一tuple的列表,对每个tuple对应的list中相同索引的整数分别求和(保持四个整数独立)。

示例输入

[[(30, 40), [4, 7, 7, 1]],[(30, 40), [2, 9, 3, 4]],[(30, 40), [6, 5, 10, 0]],[(20, 40), [4, 0, 4, 0]],[(20, 40), [3, 4, 14, 5]],[(20, 40), [3, 2, 12, 0]],[(10, 40), [223, 22, 12, 9]]]

期望输出

[[(30, 40), [12, 21, 20, 5]],[(20, 40), [10, 6, 30, 5]],[(10, 40), [223, 22, 12, 9]]]

(注:原示例中(20,40)对应的列表结果有误,正确求和应为[4+3+3, 0+4+2, 4+14+12, 0+5+0] = [10,6,30,5])

错误代码分析

你尝试用字典实现,但代码中dict_tuples[item[0]] += item[1]是列表拼接操作,会把两个列表合并成一个长列表,而非对相同索引的元素求和,这是问题所在。

你的尝试代码:

l = [[(30, 40), [4, 7, 7, 1]],[(30, 40), [2, 9, 3, 4]],[(30, 40), [6, 5, 10, 0]],[(20, 40), [4, 0, 4, 0]],[(20, 40), [3, 4, 14, 5]],[(20, 40), [3, 2, 12, 0]],[(10, 40), [223, 22, 12, 9]]]

dict_tuples = {}
for item in l:
    if item[0] in dict_tuples:
        dict_tuples[item[0]] += item[1]
    else:
        dict_tuples[item[0]] = item[1]

正确实现方法

方法一:逐索引遍历求和

l = [[(30, 40), [4, 7, 7, 1]],[(30, 40), [2, 9, 3, 4]],[(30, 40), [6, 5, 10, 0]],[(20, 40), [4, 0, 4, 0]],[(20, 40), [3, 4, 14, 5]],[(20, 40), [3, 2, 12, 0]],[(10, 40), [223, 22, 12, 9]]]

dict_tuples = {}
for item in l:
    key = item[0]
    values = item[1]
    if key in dict_tuples:
        # 对每个索引位置的数值分别相加
        for i in range(len(values)):
            dict_tuples[key][i] += values[i]
    else:
        # 复制列表避免修改原数据
        dict_tuples[key] = values.copy()

# 转换为目标格式
result = [[k, v] for k, v in dict_tuples.items()]
print(result)

方法二:用zip和列表推导式简化求和

l = [[(30, 40), [4, 7, 7, 1]],[(30, 40), [2, 9, 3, 4]],[(30, 40), [6, 5, 10, 0]],[(20, 40), [4, 0, 4, 0]],[(20, 40), [3, 4, 14, 5]],[(20, 40), [3, 2, 12, 0]],[(10, 40), [223, 22, 12, 9]]]

dict_tuples = {}
for key, vals in l:
    if key in dict_tuples:
        # 用zip配对两个列表的元素,逐个求和
        dict_tuples[key] = [sum(pair) for pair in zip(dict_tuples[key], vals)]
    else:
        dict_tuples[key] = vals.copy()

result = [[k, v] for k, v in dict_tuples.items()]
print(result)

两种方法都能得到正确的分组求和结果,方法二更简洁,且不依赖固定的列表长度(即使后续列表长度变化也能正常工作)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:01:49