Python 将元组添加到元组列表中

Python 将元组添加到元组列表中,python,Python,如何将一个元组和一个元组列表相加,例如: >>> a = [(0, 1, 2), (3, 4, 5), (6, 7, 8)] >>> b = (10, 20, 30) 结果是: >>> c [(10, 21, 32), (13, 24, 35), (16, 27, 38)] 我知道用numpy很容易解决这个问题: >>> import numpy >>> c = numpy.add(a, b).tol

如何将一个元组和一个元组列表相加,例如:

>>> a = [(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> b = (10, 20, 30)
结果是:

>>> c 
[(10, 21, 32), (13, 24, 35), (16, 27, 38)]
我知道用numpy很容易解决这个问题:

>>> import numpy
>>> c = numpy.add(a, b).tolist()
>>> c
[[10, 21, 32], [13, 24, 35], [16, 27, 38]]

但是我宁愿避免numpy。

一行程序使用嵌套列表理解和魔法
zip
交错固定
b
三元组添加到
a
的迭代元素中,无需numpy:

a = [(0, 1, 2), (3, 4, 5), (6, 7, 8)]
b = (10, 20, 30)

c = [tuple([i+j for i,j in zip(e,b)]) for e in a]
print(c)
结果:

[(10, 21, 32), (13, 24, 35), (16, 27, 38)]
编辑:如果不需要,您可以删除
元组
转换:

c = [[i+j for i,j in zip(e,b)] for e in a]

您可以通过列表理解来执行此操作:

a = [(0, 1, 2), (3, 4, 5), (6, 7, 8)]
b = (10, 20, 30)
c = [[x + b[i] for i, x in enumerate(y)] for y in a]
c
将是一个列表列表,而不是元组列表。如果这很重要,您可以这样做:

c = [tuple(x + b[i] for i, x in enumerate(y)) for y in a]

定义一个函数来求两个向量的和:

def sum_vectors(a, b):
    return tuple(sum(z) for z in zip(a, b))
使用它定义一个函数,用于将向量添加到向量列表中:

def add_vector_to_vectors(v, ws):
    return [sum_vectors(v, w) for w in ws]
用法示例:

>>> a = [(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> b = (10, 20, 30)
>>> add_vector_to_vectors(b, a)
[(10, 21, 32), (13, 24, 35), (16, 27, 38)]

哎呀,看来已经有人抢先了。我将把它保留在这里,以展示一种使用
enumerate
而不是
zip
的方法。您的解决方案在python 2中更快,因为
zip
构建了一个列表<代码>枚举没有。无论如何:回答得好。你已经得到了一些正确的答案,但我会保留我的答案,因为我发现将其分解为步骤更具可读性。使用
map
sum
的一个变体是
[元组(map(sum,zip(x,b)))表示a中的x]