错误:“int”对象不可下标 - 在reduce函数中使用lambda时

2023-12-08

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

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)

OUTPUT:

200

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

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

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


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

From the functools.reduce docs:

左侧参数 x 是累积值,右侧参数 y 是可迭代的更新值

就你而言,x is a and y is b由于您如何命名参数。所以,a is not一个元组,它是sum。如果您不提供默认起始值​​,则初始累积值将是迭代器中的第一个值(('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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:“int”对象不可下标 - 在reduce函数中使用lambda时 的相关文章

随机推荐