2017-01-17 35 views
6

考慮API返回四個列表作爲輸出。讓我們考慮輸出爲同時迭代多個列表並捕獲值的差異

a = [1,2,3,4] 
b = [1,2,3,4] 
c = [1,2,4,3] 
d = [1,2,3,5] 

現在,首先我們要比較這些列表是否相等。

僅當元素和索引匹配時,列表才相等。 例如,從上面的列表中,ab是相等的。但是ac不相等。

如果列表不相同,則預期輸出爲:此列表中此索引處的此元素與其他不相同。

爲了比較和獲取兩個列表的差異,我寫了下面的代碼。

for i in range(len(a)): 
    if a[i] != c[i]: 
     print "Expected value at ",i," is ",a[i] 
     print "But got value ",c[i],"in second list"  

現在的問題是如何實現這一目標的所有上述四個列表?

+2

如果所有四個列表完全不同,您會發生什麼? –

+0

應該給所有列表全部不同並打印列表。 –

+0

難道你不能只使用4C2循環?提及是否有任何限制 –

回答

4

您可以使用zip同時遍歷每個列表並比較每個索引處的值。在下面的示例中,我將列表a的值與其餘列表進行比較。

a = [1,2,3,4] 
b = [1,2,3,4] 
c = [1,2,4,3] 
d = [1,2,3,5] 

for i, x in enumerate(zip(a, b, c, d)): 
    print('--------- Index: {}'.format(i)) 
    base = x[0] 
    for j, y in enumerate(x[1:], 2): 
     if base!=y: 
      print('{} not equal to {} : --> List {}'.format(base, y, j)) 

它打印:

--------- Index: 0 
--------- Index: 1 
--------- Index: 2 
3 not equal to 4 : --> List 3 
--------- Index: 3 
4 not equal to 3 : --> List 3 
4 not equal to 5 : --> List 4 
+0

如何找到我們在哪個列表中有不同的值? –

+1

使用枚舉遍及內部'for'循環來了解索引。檢查編輯 –

+1

太好了。真認罪>讓我理解你的代碼。喜歡它如何使用枚舉與zip一起。 –

0

通過設立檢查哪些是相等的,哪些是不相等的列表mylist = [a, b, c,d]然後循環。

for i in range(len(mylist)-1) 
    for j in range(i+1, len(mylist)) 
     # Check mylist[i] agaist mylist[j] and report results 

例如,這將測試針對B,c和d
b對c和d
Ç對d

1

從評論:

如何找到在哪個列表中我們有不同的價值?

import collections as ct 

counter = ct.Counter(map(tuple, [a,b,c,d]))    # make hashable keys w/tuples 
base = counter.most_common(1)[0][0]      # find most frequent sequence 
[list(seq) for seq in counter if seq != base]    # filter uncommon sequences 

輸出(不匹配的列表):

[[1, 2, 4, 3], [1, 2, 3, 5]] 

我們收集所有類似sequences如在collections.Counter鍵。如果所有序列匹配,Counter字典中只應該有一個條目。否則,過濾剩餘的序列。

+0

如何找到我們具有不同價值的列表? –