Добавление двух кортежей в элемент

Мне просто интересно, есть ли особенно питонический способ добавления двух кортежей по-разному?

Пока (a и b – кортежи), у меня есть

map(sum, zip(a, b)) 

Мой ожидаемый результат:

 (a[0] + b[0], a[1] + b[1], ...) 

И возможное взвешивание должно было бы дать вес 0,5 и b 0,5 или так далее. (Я пытаюсь принять средневзвешенное значение).

Это хорошо работает, но я хочу добавить взвешивание, я не совсем уверен, как я это сделаю.

благодаря

5 Solutions collect form web for “Добавление двух кортежей в элемент”

Залейте их, затем суммируйте каждый кортеж.

 [sum(x) for x in zip(a,b)] 

EDIT: Вот лучшая, хотя и более сложная версия, которая позволяет взвешивать.

 from itertools import starmap, islice, izip a = [1, 2, 3] b = [3, 4, 5] w = [0.5, 1.5] # weights => a*0.5 + b*1.5 products = [m for m in starmap(lambda i,j:i*j, [y for x in zip(a,b) for y in zip(x,w)])] sums = [sum(x) for x in izip(*[islice(products, i, None, 2) for i in range(2)])] print sums # should be [5.0, 7.0, 9.0] 
 >>> a = (1, 2, 3) >>> b = (4, 5, 6) >>> def averageWeightedSum(args): return sum(args) / len(args) >>> tuple(map(averageWeightedSum, zip(a, b))) (2.5, 3.5, 4.5) 

Альтернативой было бы сначала применить весы. Это также позволит вам иметь разные веса:

 >>> from operator import mul >>> weights = (0.3, 0.7) >>> tuple(sum(map(mul, x, weights)) for x in zip(a, b)) (3.0999999999999996, 4.1, 5.1) >>> weights = (0.5, 0.5) >>> tuple(sum(map(mul, x, weights)) for x in zip(a, b)) (2.5, 3.5, 4.5) 

Возьмем формулу для взвешенной суммы одной пары координат и сформируем кортеж с итератором над каждой парой (обратите внимание на две переменные после for ):

 tuple(0.5*an + 0.5*bn for an, bn in zip(a, b)) 

Это упрощает и читает как однострочный. Конечно, если ваша «взвешенная сумма» – сложная функция, вы сначала определяете ее как отдельную функцию.

Если вы не против зависимости, вы можете использовать numpy для элементарных операций над массивами

 >>> import numpy as np >>> a = np.array([1, 2, 3]) >>> b = np.array([3, 4, 5]) >>> a + b array([4, 6, 8]) 

Если ваши кортежи содержат str объекты:

 list(map(''.join, zip('abc', '123'))) # Returns ['a1', 'b2', 'c3'] 
  • Как я могу взорвать кортеж, чтобы он мог быть передан как список параметров?
  • Является ли `namedtuple` действительно эффективным в использовании памяти в качестве кортежей? В моем тесте НЕТ
  • Pythonic способ разбивать числа, разделенные запятыми, на пары
  • Кортежи: + = оператор выдает исключение, но преуспевает?
  • Python не может определить кортежи в функции
  • Написание списка кортежей в текстовый файл в Python
  • Временная сложность кортежа в Python
  • Как искать список кортежей в Python
  • Назначение кортежа Python и проверка в условных операторах
  • python json dump writeability "не умеет писать"
  • Как я могу взять два кортежа для создания словаря?
  • Python - лучший язык программирования в мире.