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 you can iterate over or step through like a collection.

You can use the zip() function 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:

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.

x = ("Joey", "Monica", "Ross")
y = ("Chandler", "Pheobe")
z = ("David", "Rachel", "Courtney")
result = zip(x, y, z)
print(result)
print(tuple(result))

Output:

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

zip function example

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.

That’s why we said before the length of the output equals the length of the smallest iterator, which is 2 in this case.

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

If you don’t pass parameters to the function, it will generate an empty iterable. For example, the result of print(tuple(zip())) will be ():

Tuple output

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:

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:

dict(zip(coin, code))

The output will be:

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

Convert lists to a dictionary

Zip function on three/multiple lists

You can pass multiple iterables to the zip function of the 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:

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:

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

Zip multiple lists

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:

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

Output:

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

Zip different length

In this example, list_a has five elements, and list_b has three elements. The iterator will stop when it reaches the third element. Therefore, we have three 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.

Consider the following example:

Example:

a = ['a1', 'a2', 'a3']
r = zip(*a)
print(tuple(r))

Output:

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

Unzip using asterisk

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:

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

Output:

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

Matrix zip

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

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

[[1, 2, 3]]

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

Example:

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

Output:

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

Transpose single dimensional matrix

Iterate through two lists in parallel

We can also iterate through two lists simultaneously using the zip function. Check the following example:

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:

Numpy C
asyncio C++
cmath Java
enum Python

Parallel iteration using zip function

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 points like 10.3, 14.44, etc.

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

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

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

Pass a single iterable

If you pass one iterable to the arguments of zip() function, there would be one item in each tuple. Check the following code:

list_1 = ['C', 'C++', 'Python', 'Java']
list_zip = zip(list_1)
print(tuple(list_zip))

Output

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

Pass a single iterable

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:

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

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

Now let’s create two lists to zip together.

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):

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

Now close the file and check the saved data.

f.close()

The following will be the contents of the file:

Send zip function output to a 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:

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, which comes handy in many cases.  I hope you find the tutorial useful.

Keep coming back.

2 thoughts on “Python zip function tutorial (Simple Examples)
Leave a Reply

Your email address will not be published. Required fields are marked *