如何在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
相关产品推荐
相关产品推荐

