Применить функцию со списками, такими как входы - PullRequest
0 голосов
/ 11 октября 2018

Я хочу создать новый список (V) из других списков (a, b, c) и использовать функцию, но я хотел бы воспользоваться преимуществами python и применить функцию к трем спискам, а не элемент за элементом,

Например, у меня есть списки a, b и c;и результат после применения функции должен быть V. Спасибо.

def mag(a, b, c):
    # something sophisticated
    return (a+b)*c

a = [1, 5, 7]
b = [4, 8, 3] 
c = [2, 6, 3]
V = [10, 78, 30]

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

Альтернативным решением является использование map и lambda

In [16]: list(map(lambda p: mag(*p), zip(a, b, c)))
Out[16]: [10, 78, 30]
0 голосов
/ 11 октября 2018

Вы хотите сначала сжать аргументы, а затем сопоставить функцию с распакованными кортежами:

from itertools import starmap

starmap(mag, zip(a,b,c))

См. здесь для примера.

0 голосов
/ 11 октября 2018

Вы можете легко сделать это с помощью функции map:

V = list(map(mag, a, b, c))
0 голосов
/ 11 октября 2018

А как насчет использования только встроенных функций?Например, zip

>>> [mag(a_, b_, c_) for a_,b_,c_ in zip(a, b, c)]
[10, 78, 30]

Плюс еще одна встроенная функция python, map , которая возвращает итератор и, таким образом, ускоряет работу и экономит память:

>>> gen = map(lambda uple:mag(*uple), zip(a, b, c))
>>> list(gen)
[10, 78, 30]
...