Home » Python » Python Zip Function Tutorial (Simple Examples)

About Mokhtar Ebrahim

Mokhtar Ebrahim
LikeGeeks: Learn more about Linux, Server Administration, Web Development, Python, iOS, and Tech Tips

Python Zip Function Tutorial (Simple Examples)

The zip() function in Python programming is a built-in standard function that takes multiple iterables or containers as parameters. An iterable in Python is an object that can be iterated or stepped through like a collection.

The zip() function is used to map the same indexes of more than one iterable. Mapping these indexes will generate a zip object

How zip function works?

The zip function pairs the first elements of each iterator together then pairs the second elements together and so on.

If the iterables in the zip function are not the same length, then the smallest length iterable decides the length of the generated output.

Syntax:

1
zip(iterable0, iterable1, interable2, …)

Iterables can be Python lists, dictionary, strings, or any iterable object.

In the syntax above, the iterable0, iterable1, etc. are the iterator objects that we need to join using the zip function.

Example:

Consider the following snippet, where we have three iterables and the zip function joins them together.

01
02
03
04
05
06
07
08
09
10
11
x = ("Joey", "Monica", "Ross")
 
y = ("Chandler", "Pheobe")
 
z = ("David", "Rachel", "Courtney")
 
result = zip(x, y, z)
 
print(result)
 
print(tuple(result))

Output:

1
(('Joey', 'Chandler', 'David'), ('Monica', 'Pheobe', 'Rachel'))

In the above example, we defined three iterators of different lengths. The first elements of all of them are joined together, similarly, the second elements of all of them are joined together.

But there is no third element in the iterator y, therefore, the third elements of remaining iterators are not included in the output object.

This is why we said before that the length of the output is determined by the length of the smallest iterator which is 2 in this case.

The tuple() function converts the zip object to a tuple.

If no parameters are passed to the function, an empty iterable will be generated. For example, the result of print(tuple(zip()))  will be ():

Convert two lists to a dictionary

To convert two lists to a dictionary using the zip function, you will join the lists using the zip function as we did, then you can convert them to a dictionary.

Suppose we have two lists as follows:

1
2
3
coin = ('Bitcoin', 'Ether', 'Ripple', 'Litecoin')
 
code = ('BTC', 'ETH', 'XRP', 'LTC')

So we will zip the list and then use the dict() function to convert it to a dictionary:

1
dict(zip(coin, code))

The output will be:

1
{'Bitcoin': 'BTC', 'Ether': 'ETH', 'Ripple': 'XRP', 'Litecoin': 'LTC'}

Zip function on three/multiple lists

You can pass multiple iterables to the zip function of same or different types. In the following example, we defined three lists (all are of the same length) but the data type of the items in each list is different.

Example:

1
2
3
4
5
6
7
8
9
list_a = ['Bitcoin', 'Ethereum', 'Ripple', 'Litecoin', 'Bitcoin-cash']
 
list_b = ['BTC', 'ETH', 'XRP', 'LTC', 'BCH']
 
list_c = ['11605', '271', '0.335', '102', '347']
 
result = zip(list_a, list_b, list_c)
 
print(tuple(result))

Output:

1
(('Bitcoin', 'BTC', '11605'), ('Ethereum', 'ETH', '271'), ('Ripple', 'XRP', '0.335'), ('Litecoin', 'LTC', '102'), ('Bitcoin-cash', 'BCH', '347'))

Similarly, we can join more than three iterables using the zip() function the same way.

Zip different length lists

When the arguments in the zip() function are different in length, the output object length will equal the length of the shortest input list.

Consider the following example to get a clearer view:

Example:

1
2
3
4
5
6
7
list_a = [1, 2, 3, 4, 5]
 
list_b = ['one', 'two', 'three']
 
result = zip(list_a, list_b)
 
print(tuple(result))

Output:

1
((1, 'one'), (2, 'two'), (3, 'three'))

In this example, list_a has 5 elements and list_b has 3 elements. The iterator will stop when it reaches the third element. Therefore, we have 3 tuples in the output tuple.

Zip function asterisk (Unzip)

The asterisk in a zip() function converts the elements of the iterable into separate elements. For example: if a = [a1, a2, a3] then zip(*a) equals to ((‘a’, ‘a’, ‘a’), (‘1’, ‘2’, ‘3’)).

In other words, we can say the asterisk in the zip function unzips the given iterable. That’s why the elements in list “a” are unzipped or extracted.

Consider the following example:

Example:

1
2
3
4
5
a = ['a1', 'a2', 'a3']
 
r = zip(*a)
 
print(tuple(r))

Output:

1
(('a', 'a', 'a'), ('1', '2', '3'))

Zip a matrix

A matrix is a multidimensional array of m*n, where m represents the number of rows and n represents the number of columns.

In Python, we can use the zip function to find the transpose of the matrix. The first step is to unzip the matrix using the * operator and finally zip it again as in the following example:

1
2
3
4
5
mat = [[1,2,3], [4,5,6]]
 
trans_mat = zip(*mat)
 
print(tuple(trans_mat))

Output:

1
((1, 4), (2, 5), (3, 6))

In this example, the matrix is a 2*3 matrix meaning that it has 2 rows and 3 columns. On taking the transpose of the matrix, there will be 3 rows and 2 columns.

Similarly, if we have 1 row and 3 columns in a matrix as:

1
[[1, 2, 3]]

On taking the transpose, we should have 3 rows and 1 column. Consider the following snippet:

Example:

1
2
3
4
5
mat = [[1,2,3]]
 
trans_mat = zip(*mat)
 
print(tuple(trans_mat))

Output:

1
((1,), (2,), (3,))

Iterate through two lists in parallel

We can also iterate through two lists simultaneously using the zip function. This is demonstrated in the following line of code:

Example:

1
2
3
4
5
6
7
list_1 = ['Numpy', 'asyncio', 'cmath', 'enum', 'ftplib']
 
list_2 = ['C', 'C++', 'Java', 'Python']
 
for i, j in zip(list_1, list_2):
 
    print(i, j)

Output:

1
2
3
4
5
6
7
Numpy C
 
asyncio C++
 
cmath Java
 
enum Python

In the above example, we have two different lists. The for loop uses two iterative variables to iterate through the lists that are zipped together to work in parallel.

Zip a list of floats

The zip function also works on floating-point numbers. The floating-point numbers contain decimal point like 10.3, 14.44, etc.

In this section, we will create an example where zip function iterates through a list of floats:

1
2
3
4
5
6
7
>>> float_list1 = ['12.3', '10.99', '3.33', '2.97']
 
>>> float_list2 = ['78.13', '0.89', '4.6', '0.7']
 
>>> float_zip = zip(float_list1, float_list2)
 
>>> print(tuple(float_zip))

Output:

1
(('12.3', '78.13'), ('10.99', '0.89'), ('3.33', '4.6'), ('2.97', '0.7'))

Pass a single iterable

If one iterable is passed in the arguments of zip() function, there would be one item in each tuple. This is demonstrated below:

Example:

1
2
3
4
5
list_1 = ['C', 'C++', 'Python', 'Java']
 
list_zip = zip(list_1)
 
print(tuple(list_zip))

Output

1
(('C',), ('C++',), ('Python',), ('Java',))

Output to a file

To save the output from the zip function into a file. Consider the following example:

The first step is to open a file (we will use the append mode so nothing of existing content will be deleted). Use the following line:

1
f = open("zipOutput.txt", "a+")

If the file doesn’t exist, it will be created.

Now let’s create two lists to zip together.

1
2
3
list_1 = ['C', 'C++', 'Python', 'Java']
 
list_2 = ['Solidity', 'Android', 'Php', 'Kotlin']

Finally, use the for loop to iterate through lists in zip function and write the result in the file (after converting a tuple to string):

1
2
3
for i in zip(list_1, list_2):
 
    f.write(str(i))

Now close the file and check the saved data.

1
f.close()

The following will be the contents of the file:

Also, there is a shorter code instead of using the for loop. We can convert the zip object to a tuple then to a string and write the string to the file:

1
f.write(str(tuple(zip(list_1,list_2))))

It will lead to the same result.

Working with zip function in Python is pretty neat and easy. The idea is about merging iterables together which comes handy in many cases.  I hope you find the tutorial useful.

Keep coming back.

Published on Web Code Geeks with permission by Mokhtar Ebrahim, partner at our WCG program. See the original article here: Python Zip Function Tutorial (Simple Examples)

Opinions expressed by Web Code Geeks contributors are their own.

(0 rating, 0 votes)
You need to be a registered member to rate this.
2 Comments Views Tweet it!
Do you want to know how to develop your skillset to become a Web Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. Building web apps with Node.js
2. HTML5 Programming Cookbook
3. CSS Programming Cookbook
4. AngularJS Programming Cookbook
5. jQuery Programming Cookbook
6. Bootstrap Programming Cookbook
and many more ....
I agree to the Terms and Privacy Policy

2
Leave a Reply

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Mokhtar EbrahimCharles Cognato Recent comment authors

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
newest oldest most voted
Notify of
Charles Cognato
Guest
Charles Cognato

Hi, just wanted to point out that in the section “Zip a list of floats”, the list actually contains strings.