Python比较了2个填充了3元组的列表

时间:2015-06-02 01:18:15

标签: python list compare tuples

我有2个列表,每个列表都填充了3元组。

一开始它们是平等的:

a = [(1,1,123),(1,2,124),(2,1,231),(2,2,123)]
b = [(1,1,123),(1,2,124),(2,1,231),(2,2,123)]

案例1:

最后一个元素添加到b

a = [(1,1,123),(1,2,124),(2,1,231),(2,2,123)]
b = [(1,1,123),(1,2,124),(2,1,231),(2,2,123),(3,1,123)]

Return: Added (3,1,123)

案例2

b中的元素2从124更改 - > 123

a = [(1,1,123),(1,2,124),(2,1,231),(2,2,123)]
b = [(1,1,123),(1,2,123),(2,1,231),(2,2,123)]

Return: Changed a[1] to (1,2,123)

案例3

案例1和案例2的组合,b中添加了一个额外元素,b中的元素2从124更改了 - > 123

a = [(1,1,123),(1,2,124),(2,1,231),(2,2,123)]
b = [(1,1,123),(1,2,123),(2,1,231),(2,2,123),(3,1,123)]

Return: Added (3,1,123) and Changed a[1] to (1,2,123)

在所有情况下a==b返回False,我要做的是弄清楚如何比较列表并查找元素是否已添加,更改或两者兼而有之。寻找任何建议。

4 个答案:

答案 0 :(得分:3)

changed = False
added = len(tuple1) != len(tuple2)
for e1, e2 in zip(tuple1, tuple2):
    if e1 != e2:
        changed = True
return changed, added, a==b

这是在编辑之前。这将检查是否添加,更改或相同,并相应地返回三个布尔值。

tuple1 = [(1,1,123),(1,2,124),(2,1,231),(2,2,123)]
tuple2 = [(1,1,123),(1,2,124),(2,1,231),(2,2,13), (0,0)]
changed = False
info = ""
if len(tuple1) != len(tuple2):
    info += "Added " + str(tuple2[-1])
for e1, e2 in zip(tuple1, tuple2):
    if e1 != e2:
        info += " Changed a[" + str(tuple2.index(e2)) + "] to " + str(e2)
print(info)

打印---> "添加(0,0)将[3]更改为(2,2,13)"

上面的代码是后编辑的,可以在任何只添加一个元素的实例中使用,并且元素被添加到第二个元组或者" b"。

答案 1 :(得分:1)

added = len(b) > len(a)
changed = b[:len(a)] != a
both = added and changed

答案 2 :(得分:0)

您可以比较len(b) > len(b)以检查是否添加了元素,以及是否False,然后比较是否a==b

if len(b) > len(a):
    if b[:len(a)] == a:
        print 'Added only'
    else:
        print 'Added and changed'
else:
    if b != a:
        print 'Changed'
    else:
        print 'No changes'

答案 3 :(得分:-2)

列表是mutable sequence,在比较列表时,它实际上不会比较它的内容。

然而,元组,是不可改变的。比较元组将为您提供预期的行为。

tuple(a) == tuple(b)

这是测试a == b。

的简单方法