Python zip()

In this tutorial, we will learn about the Python zip() function with the help of examples.

The zip() function takes iterables (can be zero or more), aggregates them in a tuple, and returns it.

Example

languages = ['Java', 'Python', 'JavaScript']
versions = [14, 3, 6]

result = zip(languages, versions)
print(list(result))

1. Syntax of zip()

The syntax of the zip() function is:

zip(*iterables)

2. zip() Parameters

ParameterDescription
iterablescan be built-in iterables (like: list, string, dict), or user-defined iterables

Recommended Reading: Python Iterators, __iter__ and __next__

3. zip() Return Value

The zip() function returns an iterator of tuples based on the iterable objects.

  • If we do not pass any parameter, zip() returns an empty iterator
  • If a single iterable is passed, zip() returns an iterator of tuples with each tuple having only one element.
  • If multiple iterables are passed, zip() returns an iterator of tuples with each tuple having elements from all the iterables.

    Suppose, two iterables are passed to zip(); one iterable containing three and other containing five elements. Then, the returned iterator will contain three tuples. It’s because the iterator stops when the shortest iterable is exhausted.

4. Example 1: Python zip()

number_list = [1, 2, 3]
str_list = ['one', 'two', 'three']

# No iterables are passed
result = zip()

# Converting iterator to list
result_list = list(result)
print(result_list)

# Two iterables are passed
result = zip(number_list, str_list)

# Converting iterator to set
result_set = set(result)
print(result_set)

Output

[]
{(2, 'two'), (3, 'three'), (1, 'one')}

5. Example 2: Different number of iterable elements

numbersList = [1, 2, 3]
str_list = ['one', 'two']
numbers_tuple = ('ONE', 'TWO', 'THREE', 'FOUR')

# Notice, the size of numbersList and numbers_tuple is different
result = zip(numbersList, numbers_tuple)

# Converting to set
result_set = set(result)
print(result_set)

result = zip(numbersList, str_list, numbers_tuple)

# Converting to set
result_set = set(result)
print(result_set)

Output

{(2, 'TWO'), (3, 'THREE'), (1, 'ONE')}
{(2, 'two', 'TWO'), (1, 'one', 'ONE')}

The * operator can be used in conjunction with zip() to unzip the list.

zip(*zippedList)

6. Example 3: Unzipping the Value Using zip()

coordinate = ['x', 'y', 'z']
value = [3, 4, 5]

result = zip(coordinate, value)
result_list = list(result)
print(result_list)

c, v =  zip(*result_list)
print('c =', c)
print('v =', v)

Output

[('x', 3), ('y', 4), ('z', 5)]
c = ('x', 'y', 'z')
v = (3, 4, 5)