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

如何在Python 3中归约元组列表?两种写法均报语法错误

解决Python中reduce对元组列表求和的语法错误问题

看起来你遇到的问题主要来自两个方面:Python3的语法变化,以及reduce模块的导入问题。咱们一步步来拆解解决:

为什么你的两种写法会报错?

  • 第二种写法的语法错误:Python3移除了lambda参数中的元组解包语法,所以lambda (a, b), (c, d): (a + c, b + d)这种直接把参数写成元组的形式是不被支持的,会触发SyntaxError。
  • 第一种写法的可能问题:如果你的代码里没有先导入reduce,直接调用的话会报NameError——因为Python3中reduce不再是内置函数,需要从functools模块导入。

正确的解决方案

方案1:修复reduce的使用(导入模块+保留第一种lambda写法)

先导入reduce,然后使用你的第一种lambda逻辑,这样就能正常运行了:

from functools import reduce

input_list = [(1, 2), (1, 4), (1, 6)]
print(reduce(lambda a, b: (a[0] + b[0], a[1] + b[1]), input_list))
# 输出:(3, 12)

方案2:用更Pythonic的zip+sum替代reduce

其实不需要reduce也能实现这个需求,用zip把元组的对应元素打包,再分别求和,代码更直观易懂:

input_list = [(1, 2), (1, 4), (1, 6)]
result = tuple(sum(items) for items in zip(*input_list))
print(result)
# 输出:(3, 12)

这里zip(*input_list)会把列表里的元组按位置拆分,变成(1,1,1)和(2,4,6)两个分组,然后对每个分组求和,最后转成元组即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:29:07