Can I use index information inside the map function?
Use the enumerate()
function to add indices:
map(function, enumerate(a))
Your function will be passed a tuple, with (index, value)
. In Python 2, you can specify that Python unpack the tuple for you in the function signature:
map(lambda (i, el): i * el, enumerate(a))
Note the (i, el)
tuple in the lambda argument specification. You can do the same in a def
statement:
def mapfunction((i, el)): return i * elmap(mapfunction, enumerate(a))
To make way for other function signature features such as annotations, tuple unpacking in function arguments has been removed from Python 3.
Demo:
>>> 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]
You can use enumerate()
:
a = [1, 3, 5, 6, 8]answer = map(lambda (idx, value): idx*value, enumerate(a))print(answer)
Output
[0, 3, 10, 18, 32]
To extend Martijn Pieters' excellent answer, you could also use list comprehensions in combination with enumerate
:
>>> a = [1, 3, 5, 6, 8]>>> [i * v for i, v in enumerate(a)][0, 3, 10, 18, 32]
or
[mapfunction(i, v) for i, v in enumerate(a)]
I feel list comprehensions are often more readable than map
/lambda
constructs. When using a named mapping function that accepts the (i, v)
tuple directly, map
probably wins though.