2015-03-20 3 views
0

Я хотел бы использовать map сделать следующее вещь:Как передать два параметра в функцию лямбды на карте

res = [] 
arr1 = [1, 2, 3] 
arr2 = [5, 0, 10] 
for n, m in zip(arr1, arr2): 
    res.append(n - 0.5 * m) 

Это эквивалентно делать в списке компе:

res = [n - 0.5 * m for n, m in zip(arr1 ,arr2)] 

Но он терпит неудачу используя map:

res = map(lambda x, y: x - 0.5 * y, zip(arr1, arr2)) 

TypeError: <lambda>() takes exactly 2 arguments (1 given) 

есть отличный способ сделать это, используя map?

ответ

2

Вы промелькнул в arr1 и arr2 в один аргумент

>>> res = [] 
>>> arr1 = [1, 2, 3] 
>>> arr2 = [5, 0, 10] 
>>> res = map(lambda x, y: x - 0.5 * y, arr1, arr2) 
>>> res 
[-1.5, 2.0, -2.0] 
1
>>> map(lambda (x, y): x - 0.5 * y, zip(arr1, arr2)) 
[-1.5, 2.0, -2.0] 

Как что вы могли бы принять кортеж в лямбда, чтобы исправить это, но я предпочитаю, что предложил DTing.

Смежные вопросы