2015-10-22 208 views
1

是否可以匹配兩個元組,逐個比較每個元素,並確定發生了什麼變化。比較列表中的每個元素

注意: runA和runB輸出在循環中,所以這意味着它不是硬編碼的。 runA和runB的範圍可以是tool01到tool100或tool01等,這取決於循環結果到我的查詢。只是簡單的工具是在for循環中,所以工具no可以更多或更少。的我的輸出#1

實施例的結果:

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')] 

runB = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '22')] 

預期結果#1:我的輸出#2

print 'there is a changes on tool03' 

實施例的結果:

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')] 

runB = [(u'tool01', '20'), (u'tool02', '21'), (u'tool03', '23')] 

預期結果#2 :

print 'there is a changes on tool01' 
print 'there is a changes on tool02' 
012的我的輸出#

實施例的結果:

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')] 

runB = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')] 

預期結果#3:

print 'there is no change' 

任何建議或基礎碼,由於事先。

注意: runA和runB輸出在循環中,所以這意味着它不是硬編碼的。 runA和runB的範圍可以是tool01到tool100或tool01等,這取決於循環結果到我的查詢。只是簡單的工具是在for循環中,所以工具no可以更多或更少。

+0

有沒有理由不能使用字典? – user3846506

+3

編寫這樣的代碼當然是可能的,但Stack Overflow不是代碼寫入服務。你有什麼嘗試?如果您在初次嘗試時遇到問題,請描述問題,我們會盡力爲您提供幫助。 – Blckknght

+0

是可以使用字典。我會盡力。 @Blckknght,我只是發佈我的關注,以便在Im編碼時,這個會話也可以作爲我的備份幫助。 –

回答

0
runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')] 
runB = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '22')] 
for i in range(len(runA)): 
    if runA[i] == runB[i]: 
     print True 
    else: 
     print False 
0
for i in runA - 1: 
    If runA[i][1] != runB[i][1]: 
    print 'there is a changes in ' + runA[i][0] 

這是假設兩件事情:

  1. 名單是相等的長度
  2. 元組的名字有相同的指數

至於你提意見的一個建議,使用字典會更容易,因爲您可以遍歷鍵和訪問成員d[key]

+0

我添加一個額外的筆記爲我的關注,因爲該工具是動態的可以根據循環更改也許我會把我的列表作爲字典。 –

0
#/bin/python 
confirm_change=False 

runA = [(u'tool01', '21'), (u'tool02', '22'), (u'tool03', '23')] 

runB = [(u'tool01', '20'), (u'tool02', '21'), (u'tool03', '23')] 

for i in runA: 
    for j in runB: 
     if i[0]==j[0] and not i[1]==j[1]: 
      confirm_change=True 
      print("there is a change in",i[0]) 
if confirm_change==False: 
    print("There is no change") 
+0

我爲我的關注添加了一個附註,因爲該工具是動態的,可以根據循環進行更改,也許我會將我的列表作爲字典。 –

0

下一個函數應該做你需要的東西:

def matchTuples(runA, runB): 
    equal = True 
    for i in range(0, len(runA)): 
     if runA[i] != runB[i]: 
      equal = False 
      print 'there is a change on ' + runA[i][0] 
    if equal: 
     'there is no change' 

它遍歷的列表,以檢查它們是否相等。如果有變化,那麼它會輸出已更改元組的名稱。

最後,如果沒有檢測到變化(也就是說,如果變量「equal」仍然爲True),它會打印出'沒有變化'。

+0

我爲我的關注添加了一個附註,因爲該工具是動態的,可以根據循環進行更改,也許我會將我的列表作爲字典。 –

+0

我不確定我完全理解你在說什麼,但是即使列表長度更長或更短(假設兩個列表的長度相同),並且即使這些工具的名稱不同,該函數也應該可以工作。 –