Я хочу создать новый список (V) из других списков (a, b, c) и использовать функцию, но я бы хотел использовать python и применить функцию к трем спискам, а не по элементам.
Например, у меня есть списки a, b и c; и результат после применения функции должен быть В. Спасибо.
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]
Вы можете легко сделать это с помощью функции map
:
V = list(map(mag, a, b, c))
map
будет частично применять функцию с каждой итерацией. Действительно хороший ответ.
map(mag, a, b, c)
будет достаточно.
Вы хотите сначала заархивировать аргументы, а затем отобразить функцию в распакованных кортежах:
from itertools import starmap
starmap(mag, zip(a,b,c))
См. Здесь пример.
Альтернативным решением является использование map
и lambda
In [16]: list(map(lambda p: mag(*p), zip(a, b, c)))
Out[16]: [10, 78, 30]
Как насчет использования только встроенных функций? Как zip
>>> [mag(a_, b_, c_) for a_,b_,c_ in zip(a, b, c)]
[10, 78, 30]
Плюс еще одна функция buit-in на основе python, карта, которая возвращает итератор, и, таким образом, делает вещи быстрее и заканчивает экономить память:
>>> gen = map(lambda uple:mag(*uple), zip(a, b, c))
>>> list(gen)
[10, 78, 30]
mag
(как написано) к элементамa
,b
иc
не даетV
Что вы пытаетесь достичь?