我想编写一个返回元组列表的过程。每个元组中的第k个元素对应于作为输入给出的列表中元组的第k个元素的总和。
A = [(1,2),(3,4)] B = [(10,20),(30,40)]
将返回
[(11,22),(33,44)]
def sumtuple(A,B):
ret = []
for K in A:
for L in B:
ret.append(K[0] + L[0], K[1] + L[1])
return ret
我的尝试存在一些明显的缺陷,它会产生一些不良后果,例如它给出了答案中的(13,24)。我明白为什么会出错。但我无法做的就是编写一些能够给我想要的结果的代码。
我是新手,请善待。
答案 0 :(得分:2)
使用zip
同时循环遍历两个列表:
def sumtuple(A,B):
ret = []
for a, b in zip(A, B):
ret.append((a[0] + b[0], a[1] + b[1]))
return ret
答案 1 :(得分:0)
def sumtuple(A,B):
ret = []
for K in range(len(A)):
ret.append(A[K][0] + B[K][0], A[K][1] + B[K][1])
return ret
答案 2 :(得分:0)
使用map
operator.add
和zip_longest
来处理不均匀的长度列表:
from operator import add
from itertools import zip_longest
print([tuple(map(add, a, b)) for a,b in zip_longest(A,B,fillvalue=(0,0))])
[(11, 22), (33, 44)]
如果一个列表的长度不同,您将不会丢失数据:
A = [(1, 2), (3, 4)]
B = [(10, 20), (30, 40),(10,12)]
print([tuple(map(add, a, b)) for a,b in zip_longest(A,B,fillvalue=(0,0))])
[(11, 22), (33, 44), (10, 12)]
答案 3 :(得分:0)
由您的功能制作:)
def sumtuple(A,B):
b=[]
for i in range(len(A)):
l=[]
for j in range(len(A[i])):
l.append(A[i][j]+B[i][j])
l=tuple(l)
b.append(l)
return b