列表上的 lambda 迭代

lambda iteration over list

谁能帮我解决代码错误。

我需要的是将每个列表的第二个和第三个元素相乘,然后将四个值相加(总结果=431900) 我用一个简单的 for 循环完成了它:

lst = [['switch', '4', '12500'], ['hub', '1', '500'], ['router', '1', '1400'], ['jacks', '40', '9500']]

summ = 0
for i in lst:
    summ += int(i[1])*int(i[2])
print(summ)

但我想用函数或 lambda 改进它:

from functools import reduce

result = reduce(lambda x, y: int(x[1])*int(x[2]))+(int(y[1])*int(y[2]), lst)
print(result)

它 returns 只有第一次迭代 (50500),在第二次 x 变成 None (y 变成下一个列表)并且程序 returns 一个错误: 类型错误:'NoneType' 对象不可订阅。

我不明白为什么 x 会变成 None,这里有什么问题吗?

请注意,一旦求和,x 现在是双精度而不是列表,因此不可订阅。因此,您需要使用 initial(即第 3 个)参数。 Ans 因为是求和,所以我们从0开始求和。

reduce(lambda x, y: x + int(y[1]) * int(y[2]), lst, 0)
Out[230]: 431900