如何对三重嵌套列表内的元素按组对应求和?
嵌套列表对应位置求和解决方案
方法一:用zip()+列表推导式(简洁高效)
针对你的需求,最简洁的实现方式是利用zip()解包组内的所有列表,再对每个对应位置的元素求和:
# 示例数据 data = [([1, 0, 1, 1], [1, 0, 1, 10]), ([1, 0, 1, 1], [1, 1, 0, 100]), ([1, 0, 1, 10], [1, 1, 0, 100])] # 计算每组对应位置的和 result = [tuple(sum(items) for items in zip(*group)) for group in data] print(result) # 输出:([2, 0, 2, 11], [2, 1, 1, 101], [2, 1, 1, 110])
关键说明:
*group将每组内的多个列表解包为zip()的参数,这样zip()会把所有列表的对应位置元素打包成元组(比如第一组会得到(1,1), (0,0), (1,1), (1,10))- 对每个元组执行
sum()得到对应位置的总和,最后转成tuple匹配你要的结果格式(如果需要列表,直接去掉tuple()即可)
这个写法完全适配你的实际场景:1000组、每组10个30元素的列表,运行效率也足够。
方法二:自定义循环(直观易调试)
如果更倾向于手动控制流程,用嵌套循环实现:
result = [] for group in data: # 初始化和列表,长度与组内单个列表一致 sum_list = [0] * len(group[0]) for lst in group: for idx, num in enumerate(lst): sum_list[idx] += num result.append(tuple(sum_list))
常见问题排查
你之前尝试失败可能是这两个原因:
- 使用
zip(group)而非zip(*group):前者会把每个列表作为整体打包,而非对应位置元素 - 循环时未正确初始化和列表,或索引越界(确保组内所有列表长度一致)
内容的提问来源于stack exchange,提问作者Selami
相关产品推荐
相关产品推荐

