运行以下代码时,出现以下错误:
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 left argument, x, is the accumulated value and the right argument, y, is the update value from the iterable
在您的情况下,由于您命名参数的方式,x
是 a
,y
是 b
。因此,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/