Применить функцию со списками, такими как входы

1

Я хочу создать новый список (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]
  • 1
    Применение mag (как написано) к элементам a , b и c не дает V Что вы пытаетесь достичь?
  • 0
    См. Docs.python.org/3/library/functions.html#map (списки являются итеративными)
Теги:
map-function

4 ответа

5
Лучший ответ

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

V = list(map(mag, a, b, c))
  • 5
    Вау, это круто. Я понятия не имел, что map будет частично применять функцию с каждой итерацией. Действительно хороший ответ.
  • 0
    И я нет. Работает и в Python 27, где map(mag, a, b, c) будет достаточно.
3

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

from itertools import starmap

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

См. Здесь пример.

1

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

In [16]: list(map(lambda p: mag(*p), zip(a, b, c)))
Out[16]: [10, 78, 30]
1

Как насчет использования только встроенных функций? Как 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]
  • 0
    Спасибо, но пример выше был только примером, мне нужно использовать функцию
  • 1
    @ User140259. Теперь лучше ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню