python - 用枚举 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
解决方案
最简单的:
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
推荐阅读
- xamarin.forms - Can you define RowDefinition in style xamarin forms
- json - JMeter 动态 JSON 列表生成
- python - 根据布尔值显示不同的内容
- python-3.x - 使用多处理分配共享内存时出现虚假的内存不足错误
- reactjs - React JS - Material UI ListItem (with Collapse API) onClick 展开/折叠所有子列表项而不是选定的一项
- android - Websocket 客户端连接需要大约 5 秒
- python - 在 Numpy 数组中跳跃多元素切片
- authentication - 微服务的登录身份验证流程
- amazon-web-services - Control Tower AWS - 共享 s3 存储桶
- kinect - Open3D 的迭代次数