4

Я понимаю, что с одним аргументом списка map() можно заменить на понимание списка. НапримерСопоставление списка эквивалентно отображению в двух списках параллельно

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

можно заменить

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

Теперь как бы я сделать что-то подобное для двух параллельных списков. Другими словами, у меня есть строка кода со следующей схемой:

map(func, xs, ys) 

где func() принимает два аргумента.

Как я могу сделать то же самое со списком?

ответ

8

map() с несколькими аргументами эквивалентен использованию zip() function по дополнительным аргументам. Используйте zip() в списке понимание, чтобы сделать то же самое:

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

Вообще говоря, любое map(func, a1, a2, .., an) выражение может быть преобразовано в список понимания с [func(*args) for args in zip(a1, a2, .., an)].

+0

Этот ответ менее тщательный, чем старый, популярный, канонический дубликат. – TigerhawkT3

+0

@ TigerhawkT3: этого я не знал. Разве этот ответ оценивается по сравнению с другим вопросом? –

+0

Вы не думали, что уже был вопрос о 'zip'? – TigerhawkT3