获得两个元组列表之间的差异

时间:2017-05-17 16:09:43

标签: python

a=[(1,2),(2,3),(3,5),(4,1)]
b=[(1,3),(2,3),(3,5),(4,3)]

我想根据它们的索引号比较列表中的每个元素,即第一个项目到第一个项目,第二个项目到第二个项目,依此类推......

如果匹配,什么也不做,它们不匹配,附加到新列表。

4 个答案:

答案 0 :(得分:1)

香草:

>>> result = []
>>> for x, y in zip(a, b):
...     if x != y:
...         result.append(x)
...         result.append(y)
... 
>>> result
[(1, 2), (1, 3), (4, 1), (4, 3)]

乐趣:

>>> sum(([x,y] for x,y in zip(a, b) if x != y), [])
[(1, 2), (1, 3), (4, 1), (4, 3)]

您应该在这里学到的一般教训是,无论何时您想要逐个元素地比较迭代,请使用zip内置函数。之后的一切都是完全直接的(在香草版中)。

答案 1 :(得分:0)

如果列表的长度与您提供的示例相同,并且您想要附加两个不匹配的元素,则可以使用:

    a=[(1,2),(2,3),(3,5),(4,1)]
    b=[(1,3),(2,3),(3,5),(4,3)]
    c = []
    for i in xrange(len(a)):
        if a[i] != b[i]:
            c.append(a[i])
            c.append(b[i])
    print c

输出:

[(1, 2), (1, 3), (4, 1), (4, 3)]

答案 2 :(得分:0)

以下是使用经典for循环的解决方案。

l = []
for i in range(len(a)):
    if a[i] != b[i]:
        l.append(a[i])
        l.append(b[i])

答案 3 :(得分:0)

使用简单的列表理解:

a=[(1,2),(2,3),(3,5),(4,1)]
b=[(1,3),(2,3),(3,5),(4,3)]

new_list = [a[i] for i in range(len(a)) if a[i] != b[i]]