我们假设有一个列表a = [1, 3, 5, 6, 8]。我想对这个列表应用一些转换,并且我想避免顺序地进行,所以像map(someTransformationFunction, a)这样的东西通常会起作用,但是如果转换需要知道每个对象的索引呢?例如,假设每个元素都必须乘以它的位置,那么列表应该转换为a = [0, 3, 10, 18, 32]。有办法做到吗?
a = [1, 3, 5, 6, 8]
map(someTransformationFunction, a)
a = [0, 3, 10, 18, 32]
fhg3lkii1#
使用enumerate()函数添加索引:
enumerate()
map(function, enumerate(a))
你的函数将被传递一个 * tuple *,带有(index, value),在Python 2中,你可以在函数签名中指定Python为你解包元组:
(index, value)
map(lambda (i, el): i * el, enumerate(a))
注意lambda参数规范中的(i, el)元组,你可以在def语句中做同样的事情:
(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]
laawzig22#
您可以使用enumerate():
a = [1, 3, 5, 6, 8] answer = map(lambda (idx, value): idx*value, enumerate(a)) print(answer)
产出
[0, 3, 10, 18, 32]
ckocjqey3#
为了扩展Martijn Pieters的出色回答,还可以将列表解析与enumerate结合使用:
enumerate
>>> a = [1, 3, 5, 6, 8] >>> [i * v for i, v in enumerate(a)] [0, 3, 10, 18, 32]
或
[mapfunction(i, v) for i, v in enumerate(a)]
我觉得列表解析通常比map/lambda结构更可读,但是当使用直接接受(i, v)元组的命名Map函数时,map可能会胜出。
map
lambda
(i, v)
yh2wf1be4#
使与Python3兼容
def map_fn(data): idx, el = data return idx*el my_list = [2,3,5,7] print(list(map(map_fn, list(enumerate(my_list)))))
fslejnso5#
# Python3 map(lambda args: print(args[0],args[1]) ,enumerate(a_list)) # use arg list, just get the result with index # Python2 map(lambda index,content: print(index,content) ,enumerate(a_list))
zqdjd7g96#
只是提醒一下,在python3中,enumerate不再是这样写的了https://stackoverflow.com/a/15712231/1984636
6条答案
按热度按时间fhg3lkii1#
使用
enumerate()
函数添加索引:你的函数将被传递一个 * tuple *,带有
(index, value)
,在Python 2中,你可以在函数签名中指定Python为你解包元组:注意lambda参数规范中的
(i, el)
元组,你可以在def
语句中做同样的事情:为了给其他函数签名特性(如注解)让路,函数参数中的元组解包已经从Python 3中移除。
演示:
laawzig22#
您可以使用
enumerate()
:产出
ckocjqey3#
为了扩展Martijn Pieters的出色回答,还可以将列表解析与
enumerate
结合使用:或
我觉得列表解析通常比
map
/lambda
结构更可读,但是当使用直接接受(i, v)
元组的命名Map函数时,map
可能会胜出。yh2wf1be4#
使与Python3兼容
fslejnso5#
zqdjd7g96#
只是提醒一下,在python3中,enumerate不再是这样写的了
https://stackoverflow.com/a/15712231/1984636