返回元组列表的函数。

时间:2015-02-13 19:24:42

标签: python

我想编写一个返回元组列表的过程。每个元组中的第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)。我明白为什么会出错。但我无法做的就是编写一些能够给我想要的结果的代码。

我是新手,请善待。

4 个答案:

答案 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.addzip_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