Python 双重迭代
如何同时遍历两个列表的pythonic方式是什么?
假设我想逐行比较两个文件(也就是说,把一个文件的第i
行和另一个文件的第i
行进行比较),我想做的事情大概是这样的:
file1 = csv.reader(open(filename1),...)
file2 = csv.reader(open(filename2),...)
for line1 in file1 and line2 in file2: #pseudo-code!
if line1 != line2:
print "files are not identical"
break
那有什么pythonic的方法可以做到这一点呢?
编辑:我不是在使用文件处理器,而是用CSV读取器(csv.reader(open(file),...)
),而且zip()
似乎对它不起作用……
最后编辑:就像@Alex M.提到的,zip()
在第一次遍历时会把文件加载到内存里,所以对于大文件来说,这会是个问题。在Python 2中,使用itertools
可以解决这个问题。
3 个回答
4
在同步执行(适用于Python 3及以上版本):
for line1, line2 in zip(file1, file2):
# etc.
作为一个“二维数组”:
for line1 in file1:
for line2 in file2:
# etc.
# you may need to rewind file2 to the beginning.
12
我推荐使用 zip
。手册上提到“要同时遍历两个或多个序列,可以使用 zip() 函数将它们配对在一起。”
比如说,
list_one = ['nachos', 'sandwich', 'name']
list_two = ['nachos', 'sandwich', 'the game']
for one, two in zip(list_one, list_two):
if one != two:
print "Difference found"