Iterating through two lists in parallel using zip()
From the Python docs, zip
returns a list of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables. This is useful for iterating over two lists in parallel. For example, if I have two lists, I can get the first element of both lists, then the second element of both lists, then the third, etc.
Python 2.5.1 (r251:54863, May 18 2007, 16:56:43) [GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> a = [1,2,3] >>> b = ['a','b','c'] >>> for i,j in zip(a,b): ... print i, j ... 1 a 2 b 3 c >>>
If the lists are different lengths, zip
truncates to the length of the shortest list. Using map
with None
is similar to zip
except the results are padded with None
.
>>> a = [1,2,3] >>> b = ['a','b','c','d'] >>> zip(a,b) [(1, 'a'), (2, 'b'), (3, 'c')] >>> map(None,a,b) [(1, 'a'), (2, 'b'), (3, 'c'), (None, 'd')] >>>
If I have a list of keys and a list of values, I can create a dictionary by passing the output of zip
to dict
.
>>> mykeys = ['a', 'b', 'c'] >>> myvalues = [1, 2, 3] >>> dict(zip(mykeys, myvalues)) {'a': 1, 'c': 3, 'b': 2} >>>
See also this thread on the Python mailing list: Iterating through two lists
Related posts
- An example using Python's groupby and defaultdict to do the same task — posted 2014-10-09
- python enum types — posted 2012-10-10
- Python data object motivated by a desire for a mutable namedtuple with default values — posted 2012-08-03
- How to sort a list of dicts in Python — posted 2010-04-02
- Python setdefault example — posted 2010-02-09
- How to conditionally replace items in a list — posted 2008-08-22