使用多个迭代器同时遍历两个列表

时间:2016-01-21 02:52:30

标签: python list

我正在尝试编写一个简单的程序,查看两个文本文件并报告两个文件之间的任何差异。对于此功能,我有两个列表,其中包含每行的单词列表(因此它们是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

知道我做错了什么吗?如果有帮助,我也可以提供完整的文件。

1 个答案:

答案 0 :(得分:4)

zip()和类似函数生成长度等于传递参数数量的tuplefor word1, word2 in izip(line1, line2):可以使用for i, line1, line2 in izip(lines1, lines2):,但lines1不会,因为您只需要处理两个迭代lines2tuple,因此无法解压缩这两个元素{ {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)