Can I use index information inside the map function? Can I use index information inside the map function? python python

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.