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

使用reduce函数的lambda时出现'int' object is not subscriptable错误

问题分析与解决

错误原因

reduce的执行逻辑是核心问题:

  • 当列表只有2个元组时,reduce仅调用一次lambda:传入前两个元组作为a和b,计算a[1]+b[1]得到整数后直接返回,不会触发后续调用,所以能正常运行。
  • 当元组数量超过2个时,reduce会把第一次lambda返回的整数结果作为下一次调用的a参数,而b是第三个元组。此时a已经是整数,再执行a[1]就会触发TypeError: 'int' object is not subscriptable——整数没有下标可访问。

正确写法

方法1:修正reduce的累积逻辑

给reduce指定初始累积值,让a始终代表当前的求和结果(整数),b代表遍历到的元组:

from functools import reduce

exp = [
    ('Dinner', 80), ('Car repair', 120), ('Netflix', 30), ('Rocket Fuel', 32)
]
sumo = reduce(lambda a, b : a + b[1], exp, 0)  # 0是初始累积值
print(sumo)  # 输出262

执行流程:第一次调用时a=0,b是第一个元组,计算0+80=80;第二次a=80,b是第二个元组,计算80+120=200,以此类推直到遍历完所有元组。

方法2:用内置sum更简洁

没必要强行用reduce,Python内置的sum搭配生成器表达式更直观易读:

exp = [
    ('Dinner', 80), ('Car repair', 120), ('Netflix', 30), ('Rocket Fuel', 32)
]
sumo = sum(item[1] for item in exp)
print(sumo)  # 输出262

生成器表达式item[1] for item in exp会逐个取出每个元组的第二个元素,sum直接完成求和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:35:20