簡體   English   中英

Python比較2個列表,其中填充了3個元組

[英]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'

List是一個可變序列 ,比較列表時,它實際上不會比較其內容。

但是,元組是不可變的。 比較元組會給您預期的行為。

tuple(a) == tuple(b)

這是測試a == b的簡單方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM