bluepaperbirds

Posted on

python zip function

In Python you can aggregate iteratables (lists, tuples). You can do that with the zip() function, which has nothing to do with the package format zip.

Before playing with the zip function, you should know the basics of Python.

The zip() function takes iterables, aggregates them in a tuple, and then return it. As argument define the iteratables: zip(iterator1, iterator2, iterator3 ...)

You can create two lists:

``````>>> a = [1,2,3]
>>> b = [4,5,6]
``````

Then use the zip function and you'll see it aggregated both lists:

``````>>> result = zip(a,b)
>>> result = list(result)
>>> print(result)
[(1, 4), (2, 5), (3, 6)]
>>>
``````

This also works for tuples as input

``````>>> a = ("Alfa","Bravo","Charlie")
>>> b = ("Delta","Echo","Foxtrot")
>>> result = zip(a,b)
>>> print(list(result))
[('Alfa', 'Delta'), ('Bravo', 'Echo'), ('Charlie', 'Foxtrot')]
>>>
``````

You can imagine you can do this for coordinates:

``````>>> x = [1,2,3,4,5]
>>> y=  [10,20,30,40,50]
>>> coordinates = zip(x,y)
>>> print(list(coordinates))
[(1, 10), (2, 20), (3, 30), (4, 40), (5, 50)]
>>>
``````

Unzip value using zip

You can zip and unzip with the zip() function. The example below shows both zipping and unzipping.

``````>>> a = ("Alfa","Bravo","Charlie")
>>> b = ("Delta","Echo","Foxtrot")
>>> result = list(zip(a,b))
>>> result
[('Alfa', 'Delta'), ('Bravo', 'Echo'), ('Charlie', 'Foxtrot')]
``````

Now unzip:

``````>>> x,y = zip(*result)
>>> x
('Alfa', 'Bravo', 'Charlie')
>>> y
('Delta', 'Echo', 'Foxtrot')
>>>
``````

Zip on other types

You can zip a string and a list:

``````>>> x = [1,2,3,4]
>>> y = "ABCD"
>>> result = list(zip(x,y))
>>> print(result)
[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D')]
``````

You can zip two strings, which combines the letters as pairs:

``````>>> x = "hello"
>>> y = "world"
>>> result = list(zip(x,y))
>>> print(result)
[('h', 'w'), ('e', 'o'), ('l', 'r'), ('l', 'l'), ('o', 'd')]
>>>
``````

Quickly generating test data?

``````>>> x = range(10)
>>> y = range(2,20,2)
>>> print(list(zip(x,y)))
[(0, 2), (1, 4), (2, 6), (3, 8), (4, 10), (5, 12), (6, 14), (7, 16), (8, 18)]
>>>
``````