首页 > 解决方案 > 用枚举 Python 减少

问题描述

我正在尝试获取列表的产品,其中每个元素都乘以它的索引 + 1。我尝试使用 reduce 和 enumerate

value = reduce(lambda a, b: (a[0]+1)*a[1]*b[1], enumerate(list))

但它给了TypeError: 'int' object is not subscriptable。是否可以在一行中完成?

编辑v2

列表示例[1,2,3]

欲望输出list[0]*1 * list[1]*2 * list[2]*3 = 36

标签: pythonlambdareduceenumerate

解决方案


最简单的:

lst = [1,2,3]  # do not shadow `list`
sum(i*v for i, v in enumerate(lst, 1))
# 14

您的 reduce 方法失败,因为它返回的int类型与其期望的两个输入 ( tuple) 不同。你可以这样做:

reduce(lambda a, b: (a[0]*a[1] + b[0]*b[1], 1), enumerate(lst, 1))[0]
# 14

请注意(..., 1)lambda 表达式的结构,其中1用作下一步的辅助因素。

更新:由于您实际上想要嵌套迭代的所有元素的同质产品,因此以下内容更简单:

from itertools import chain
from operator import mul

reduce(mul, chain(*enumerate(lst, 1)))
# 36

推荐阅读