python - 错误: 'int' object is not subscriptable - when using lambda in reduce function

标签 python lambda tuples reduce

运行以下代码时,出现以下错误:

Traceback (most recent call last):
  File "/Users/crosseyedbum/Documents/Visual Studio Code/Fundamentals of Python_5.py", line 127, in <module>
    sumo = reduce(lambda a, b : a[1] + b[1], exp)
  File "/Users/crosseyedbum/Documents/Visual Studio Code/Fundamentals of Python_5.py", line 127, in <lambda>
    sumo = reduce(lambda a, b : a[1] + b[1], exp)
TypeError: 'int' object is not subscriptable

我正在尝试对每个元组中的整数求和并将值设置为 sumo。

from functools import reduce

exp = [
    ('Dinner', 80), ('Car repair', 120), ('Netflix', 30), ('Rocket Fuel', 32)
] #stored as tuples
sumo = reduce(lambda a, b : a[1] + b[1], exp)
print(sumo)

输出:

200

但是,运行以下代码即可将整数相加为 200。谁可以给我解释一下这个。或者我只能对列表中最多两项使用此方法**

如果有人可以向初学者解释为什么会出现这种情况,我将不胜感激。

我将元组添加到列表中,并期望代码继续添加索引一,但我似乎只能运行列表中最多有两项的代码。这对我来说没有任何意义。这个错误对我来说毫无意义,更不用说为什么列表中的元组数量会导致它不起作用。

最佳答案

问题是 lambda 函数的 a 参数不是您想象的那样。

来自the functools.reduce docs :

The left argument, x, is the accumulated value and the right argument, y, is the update value from the iterable

在您的情况下,由于您命名参数的方式,xayb。因此,a 不是元组,而是总和。如果您不提供默认起始值​​,则初始累积值将是迭代器中的第一个值(在您的情况下为 ('Dinner', 80) )。由于无法将整数和元组相加,因此会出现错误。相反,传递第三个参数,该参数将成为默认值(使用整数,例如 0)。试试这个代码:

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)
print(sumo)  # => 262

关于python - 错误: 'int' object is not subscriptable - when using lambda in reduce function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75379958/

相关文章:

python - 读取Python中一行中的第二个 float

python - 根据列中的值从 Pandas 数据框中删除行

lambda - "Invalid lambda deserialization"当 lambda 用于接口(interface)实现时

python - 对 lambda 方程进行运算

python - 为什么在创建类的实例时得到的是元组而不是整数?

python - 如何根据元组包含的字符串对元组列表进行分组?

mysql - 在mysql中使用元组比较是否高效?

python - Spyder 绘图 block 控制台命令

python - 如何使用 numpy 生成具有选定空间分布的噪声?

Java8 : Why a lambda expression could do a logical and(or) with boolean