[英]Python compare 2 lists filled with 3-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)
情况二
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
和元件2在b
的变化从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,我想做的就是弄清楚如何比较列表并查找是否添加,更改或同时添加了元素。 寻找任何建议。
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)将a [3]更改为(2,2,13)”
上面的代码是后期编辑的,并且可以在仅添加一个元素并将该元素添加到第二个元组或“ b”的任何情况下使用。
added = len(b) > len(a)
changed = b[:len(a)] != a
both = added and changed
您可以比较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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.