2016-01-21 137 views
1

我正在嘗試編寫一個簡單的程序,它查看兩個文本文件並報告兩個文件之間的差異。對於這個函數,我有兩個包含每行的單詞列表的列表(所以它們是2D列表)。我想通過並比較每個單詞並報告錯誤,如果它們不相同,則將所有錯誤存儲在爲用戶打印的列表中。迭代器將報告錯誤的行,然後這兩個單詞也會被報告。與多個迭代器同時遍歷兩個列表

def compare(lines1, lines2): 
    for i, line1, line2 in izip(lines1, lines2): 
     for word1, word2 in izip(line1, line2): 
      if word1 != word2: 
       report_error(i, word1, word2) 

但是,這不適用於我。我閱讀了StackOverflow,我需要使用zip()izip()函數一次讀取兩個列表,但它仍然不適用於我。我收到以下錯誤。

File "debugger.py", line 28, in compare 
    for i, line1, line2 in izip(lines1, lines2): 
ValueError: need more than 2 values to unpack 

任何想法我做錯了什麼?如果有幫助,我也可以提供完整的文件。

回答

4

zip()和類似的函數產生長度等於傳遞參數數量的tuplefor word1, word2 in izip(line1, line2):可以工作,但for i, line1, line2 in izip(lines1, lines2):不會,因爲你只能通過兩個迭代器lines1lines2進行壓縮,所以它不能將這兩個元素的tuple解壓縮爲三個引用。

要解決此問題,請使用enumerate(),它會添加一個索引。使用start=1開始行號爲1而不是默認值爲0:

def compare(lines1, lines2): 
    for i, (line1, line2) in enumerate(izip(lines1, lines2), start=1): 
     for word1, word2 in izip(line1, line2): 
      if word1 != word2: 
       report_error(i, word1, word2) 
+0

這有助於很多,謝謝! –

+0

@ KevinJ.Chase感謝您的提示!新的StackOverflow –