6

I understand that with one list argument map() can be replaced by a list comprehension. For example

map(lambda x : x**2, range(5))

can be replaced with

[x**2 for x in range(5)]

Now how would I do something similar for two parallel lists. In other words, I have a line of code with the following pattern:

map(func, xs, ys)

where func() takes two arguments.

How can I do the same thing with a list comprehension?

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268

1 Answers1

17

map() with multiple arguments is the equivalent of using the zip() function on those extra arguments. Use zip() in a list comprehension to do the same:

[func(x, y) for x, y in zip(xs, ys)]

Generally speaking, any map(func, a1, a2, .., an) expression can be transformed to a list comprehension with [func(*args) for args in zip(a1, a2, .., an)].

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343