我正在尝试编写一个简单的程序,查看两个文本文件并报告两个文件之间的任何差异。对于此功能,我有两个列表,其中包含每行的单词列表(因此它们是2D列表)。我想通过比较每个单词并报告错误,如果它们不相同,将所有错误存储在为用户打印的列表中。 i
迭代器将报告错误行,然后还会报告这两个单词。
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
知道我做错了什么吗?如果有帮助,我也可以提供完整的文件。
答案 0 :(得分:4)
zip()
和类似函数生成长度等于传递参数数量的tuple
。 for word1, word2 in izip(line1, line2):
可以使用for i, line1, line2 in izip(lines1, lines2):
,但lines1
不会,因为您只需要处理两个迭代lines2
和tuple
,因此无法解压缩这两个元素{ {1}}分为三个参考文献。
要解决此问题,请使用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)