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
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.
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.