2016-01-21 130 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 –