元素添加两个元组

时间:2013-05-14 16:44:36

标签: python tuples

我只是想知道是否有一种特殊的pythonic方式可以添加两个元组元素?

到目前为止(a和b是元组),我有

map(sum, zip(a, b))

我的预期输出是:

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

可能的重量是给予0.5重量和0.5重量,或者等等。 (我试图加权平均值)。

哪种方法很好,但是说我想加一个加权,我不太清楚我会怎么做。

由于

5 个答案:

答案 0 :(得分:16)

压缩它们,然后对每个元组求和。

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

编辑:这是一个更好的,虽然更复杂的版本,允许加权。

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]

答案 1 :(得分:4)

>>> 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)

答案 2 :(得分:4)

如果你不介意依赖,你可以使用numpy对数组进行元素操作

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

答案 3 :(得分:2)

取一对坐标的加权和的公式,并在每对上形成一个带迭代器的元组(注意for之后的两个变量):

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

这样可以保持简单和可读性。当然,如果你的“加权和”是一个复杂的函数,你首先要将它定义为一个单独的函数。

答案 4 :(得分:0)

如果您的元组包含str个对象:

list(map(''.join, zip('abc', '123')))
# Returns ['a1', 'b2', 'c3']