Использовать несколько списков в качестве входных аргументов функции (Python)

Я знаю, что карта свойств (функция, список) применяет функцию к каждому элементу одного списка. Но как было бы, если бы моей функции требовалось более одного списка в качестве входных аргументов?

Например я попробовал:

   def testing(a,b,c):
      result1=a+b
      result2=a+c
      return (result1,result2)

a=[1,2,3,4]
b=[1,1,1,1]
c=[2,2,2,2]

result1,result2=testing(a,b,c)

Но это только объединяет массивы:

result1=[1,2,3,4,1,1,1,1]
result2=[1, 2, 3, 4, 2, 2, 2, 2]

и что мне нужно, это следующий результат:

result1=[2,3,4,5] 
result2=[3,4,5,6]

Я был бы признателен, если бы кто-нибудь мог сообщить мне, как это было бы возможно, или указать ссылку, по которой можно было бы ответить на мой вопрос в аналогичном случае.

4 ответа

Ты можешь использовать operator.add

from operator import add

def testing(a,b,c):
    result1 = map(add, a, b)
    result2 = map(add, b, c)
    return (result1, result2)

Ты можешь использовать zip:

def testing(a,b,c):
    result1=[x + y for x, y in zip(a, b)]
    result2=[x + y for x, y in zip(a, c)]
    return (result1,result2)

a=[1,2,3,4]
b=[1,1,1,1]
c=[2,2,2,2]

result1,result2=testing(a,b,c)
print result1 #[2, 3, 4, 5]
print result2 #[3, 4, 5, 6]

Быстро и просто:

result1 = [a[i] + b[i] for i in range(0,len(a))]
result2 = [a[i] + c[i] for i in range(0,len(a))]

(Или для безопасности вы можете использовать range(0, min(len(a), len(b)))

Вместо списка используйте массив из numpy. Список объединяется, в то время как массивы добавляют соответствующие элементы. Здесь я преобразовал входные данные в массивы. Вы можете кормить функцию массивами и избегать шагов преобразования.

def testing(a,b,c):
    a = np.array(a)
    b = np.array(b)
    c = np.array(c)
    result1=a+b
    result2=a+c
    return (result1,result2)

a=[1,2,3,4]
b=[1,1,1,1]
c=[2,2,2,2]

result1,result2=testing(a,b,c)

печать (результат1, результат2)

Другие вопросы по тегам