Python double iteration
What is the pythonic way of iterating simultaneously over two lists?
Suppose I want to compare two files line by line (compare each i
th line in one file with the i
th line of the other file), I would want to do something like this:
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"
br开发者_高级运维eak
What is the pythonic way of achieving this?
Edit: I am not using a file handler but rather a CSV reader (csv.reader(open(file),...)
), and zip()
doesn't seem to work with it...
Final edit: like @Alex M. suggested, zip()
loads the files to memory on first iteration, so on big files this is an issue. On Python 2, using itertools
solves the issue.
In Python 2, you should import itertools and use its izip:
with open(file1) as f1:
with open(file2) as f2:
for line1, line2 in itertools.izip(f1, f2):
if line1 != line2:
print 'files are different'
break
with the built-in zip
, both files will be entirely read into memory at once at the start of the loop, which may not be what you want. In Python 3, the built-in zip
works like itertools.izip
does in Python 2 -- incrementally.
I vote for using zip
. The manual suggests "To loop over two or more sequences at the same time, the entries can be paired with the zip() function"
For example,
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"
In lockstep (for Python ≥3):
for line1, line2 in zip(file1, file2):
# etc.
As a "2D array":
for line1 in file1:
for line2 in file2:
# etc.
# you may need to rewind file2 to the beginning.
精彩评论