SaltyCrane Blog — Notes on JavaScript and web development

How to use Python's enumerate and zip to iterate over two lists and their indices.

enumerate- Iterate over indices and items of a list

The Python Cookbook (Recipe 4.4) describes how to iterate over items and indices in a list using enumerate. For example:

alist = ['a1', 'a2', 'a3']

for i, a in enumerate(alist):
    print i, a


0 a1
1 a2
2 a3

zip- Iterate over two lists in parallel

I previously wrote about using zip to iterate over two lists in parallel. Example:

alist = ['a1', 'a2', 'a3']
blist = ['b1', 'b2', 'b3']

for a, b in zip(alist, blist):
    print a, b


a1 b1
a2 b2
a3 b3

enumerate with zip

Here is how to iterate over two lists and their indices using enumerate together with zip:

alist = ['a1', 'a2', 'a3']
blist = ['b1', 'b2', 'b3']

for i, (a, b) in enumerate(zip(alist, blist)):
    print i, a, b


0 a1 b1
1 a2 b2
2 a3 b3


#1 Jeremy Lewis commented on :

If you're working with last lists and/or memory is a concern, using the itertools module is an even better option.

from itertools import izip, count
alist = ['a1', 'a2', 'a3']
blist = ['b1', 'b2', 'b3']

for i, a, b in izip(count(), alist, blist):
    print i, a, b

yields the exact same result as above, but is faster and uses less memory.

#2 Jeremy Lewis commented on :
>>> def foo():
...  for i, x, y in izip(count(), a, b):
...   pass
>>> def bar():
...  for i, (x, y) in enumerate(zip(a, b)):
...   pass
>>> delta(foo)
>>> delta(bar)

where a = b = xrange(100000) and delta(f(x)) denotes the runtime in seconds of f(x).

#3 Eliot commented on :

Thanks for the tip and the clear example and demonstration of the performance benefit. I had heard of itertools but have not really used it. It was great to talk to you today and I hope I can talk to you again soon.

#4 Joshua Gourneau commented on :

Thanks for the zip example, I grok it now.

#5 Jesus Carrero commented on :

Jeremy, Thanks for the example, It is very helpful.

#6 Nitin commented on :

I have set of n set, each with different number of elements I wanted to find all possible combinations of n elements, one from each set. Consider two sets (e1,e2,e3) (e4,e5)

output required is as follows


I do not know the number of such sets in advance.

#8 S commented on :

In order to use zip to iterate over two lists - Do the two lists have to be the same size? What happens if the sizes are unequal? Thanks.

#9 Tim commented on :

Thx man helped me alot nice example btw

#10 matt commented on :

re:#8, unequal list length: the result is truncated to the shorter list. See below for a discussion of how to use the longest list instead:

short answer for py2.6+: use "map(None, alist, blist)"

dunno what the equivalent is in py3+

#11 ashutosh pandey commented on :

when iterating through unequal length lists using itertools

import itertools





mylist = list(itertools.izip_longest(a1,b1,c1,d1))


for items in mylist:


if items[0] is not None and items[1] is not None:

a_old = items[0]

b_old = items[1]

if items[0] is None and items[1] is None:

litems[0]= a_old

litems[1]= b_old


print a,b,c,d

is ther any other better way to give previous value if None occurs for any field.