我可以在地图函数中使用索引信息吗?

新手上路,请多包涵

假设有一个列表 a = [1, 3, 5, 6, 8]

我想对该列表应用一些转换,并且我想避免按顺序进行,所以像 map(someTransformationFunction, a) 这样的东西通常可以做到这一点,但是如果转换需要知道每个对象的索引怎么办?

例如,假设每个元素都必须乘以它的位置。因此列表应转换为 a = [0, 3, 10, 18, 32]

有没有办法做到这一点?

原文由 LetsPlayYahtzee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 328
2 个回答

使用 enumerate() 函数添加索引:

 map(function, enumerate(a))

您的函数将传递一个 _元组_,其中包含 (index, value) 。在 Python 2 中,您可以指定 Python 在函数签名中为您解压元组:

 map(lambda (i, el): i * el, enumerate(a))

请注意 lambda 参数规范中的 (i, el) 元组。您可以在 def 语句中执行相同的操作:

 def mapfunction((i, el)):
    return i * el

map(mapfunction, enumerate(a))

为了给注释等其他函数签名功能让路,函数参数中的元组解包已从 Python 3 中删除。

演示:

 >>> a = [1, 3, 5, 6, 8]
>>> def mapfunction((i, el)):
...     return i * el
...
>>> map(lambda (i, el): i * el, enumerate(a))
[0, 3, 10, 18, 32]
>>> map(mapfunction, enumerate(a))
[0, 3, 10, 18, 32]

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 enumerate()

 a = [1, 3, 5, 6, 8]

answer = map(lambda (idx, value): idx*value, enumerate(a))
print(answer)

输出

[0, 3, 10, 18, 32]

原文由 gtlambert 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题