• Python

Command Palette

Search for a command to run...

Native Functions
  • Python Abs Function
  • Python Any All Functions
  • Python Zip Function
  • Python Sum Function
  • Python Filter Function
  • Python Max Min Functions
  • Python Map Function
  • Python Round Function
  • Python Sorted Function
Data Types
  • Python Integers
  • Python Floats
  • Python Complex Numbers
  • Python List Type
  • Python Tuple Type
  • Python String Type
  • Python Range Type
Collections.abc Module
  • Python Containers
  • Python Hashable
  • Python Iterable
  • Python Iterators
  • Python Sequence
  • Python Mutable Sequence

Create an Account

FREE

Join our community to access more courses.

Create Account

On this page

Combining Iterables: Understanding the zip() FunctionWhat is zip()?Syntax of the zip() FunctionCombining Two ListsCombining More Than Two Iterableszip() with Unequal LengthsIterating with zip()Using zip() to Create DictionariesUnzipping with zip() (The * trick)zip() with Different Iterable TypesSummary
      • Blog

      Python Zip Function

      Combining Iterables: Understanding the zip() Function

      Python's built-in zip() function is a very useful tool for combining elements from multiple iterables (like lists, tuples, etc.) into a single sequence of tuples. It takes one or more iterables as input and returns an iterator that produces tuples, where the i-th tuple contains the i-th element from each of the input iterables.

      Think of it like zipping up two zippers simultaneously - the teeth from both sides are paired up.

      What is zip()?

      The zip() function aggregates elements from each of the iterables. It returns an iterator of tuples, where the i-th tuple contains the i-th element from each of the input iterables.

      The zip() iterator stops when the shortest input iterable is exhausted.

      Syntax of the zip() Function

      zip(iterable1, iterable2, ...)
      
      • iterable1, iterable2, ...: One or more iterables (lists, tuples, strings, dictionaries, sets, etc.) that you want to combine.

      zip() returns an iterator. To see the combined elements, you typically convert the iterator to a list or tuple, or iterate over it in a loop.

      Combining Two Lists

      A common use case is combining two lists into pairs.

      names = ["Alice", "Bob", "Charlie"]
      ages = [30, 25, 35]
      
      # Use zip() to combine them
      combined_data = zip(names, ages)
      
      # Convert the zip object to a list to see the contents
      print(list(combined_data))
      

      Output:

      [('Alice', 30), ('Bob', 25), ('Charlie', 35)]
      

      The output is a list of tuples, where each tuple pairs a name with a corresponding age.

      Combining More Than Two Iterables

      You can zip together any number of iterables.

      names = ["Alice", "Bob", "Charlie"]
      ages = [30, 25, 35]
      cities = ["New York", "London", "Paris"]
      
      combined_info = zip(names, ages, cities)
      
      print(list(combined_info))
      

      Output:

      [('Alice', 30, 'New York'), ('Bob', 25, 'London'), ('Charlie', 35, 'Paris')]
      

      Each tuple now contains three elements, one from each input list.

      zip() with Unequal Lengths

      As mentioned, zip() stops when the shortest input iterable is used up. This means any remaining elements in longer iterables are ignored.

      list1 = [1, 2, 3, 4]
      list2 = ['a', 'b', 'c']
      
      zipped_lists = zip(list1, list2)
      
      print(list(zipped_lists))
      

      Output:

      [(1, 'a'), (2, 'b'), (3, 'c')]
      

      The number 4 from list1 is not included because list2 ran out of elements after 'c'.

      If you need to include all elements and handle missing values, you can use itertools.zip_longest from the itertools module.

      Iterating with zip()

      You often use zip() directly in a for loop to process the combined elements pair by pair (or group by group).

      names = ["Alice", "Bob", "Charlie"]
      ages = [30, 25, 35]
      
      for name, age in zip(names, ages):
        print(f"{name} is {age} years old.")
      

      Output:

      Alice is 30 years old.
      Bob is 25 years old.
      Charlie is 35 years old.
      

      The loop variable name, age unpacks each tuple produced by zip() into individual variables.

      Using zip() to Create Dictionaries

      A very common and convenient use of zip() is to combine a list of keys and a list of values into a dictionary.

      keys = ['name', 'age', 'city']
      values = ['Alice', 30, 'New York']
      
      # Zip keys and values, then convert to a dictionary
      user_dict = dict(zip(keys, values))
      
      print(user_dict)
      

      Output:

      {'name': 'Alice', 'age': 30, 'city': 'New York'}
      

      This is a concise way to create dictionaries when you have separate lists for keys and values.

      Unzipping with zip() (The * trick)

      The zip() function can also be used to "unzip" a list of tuples back into separate lists. You do this by using the * operator (argument unpacking) on the zipped data when calling zip() again.

      # Zipped data (list of tuples)
      z = [('Alice', 30), ('Bob', 25), ('Charlie', 35)]
      
      # Unzip using zip() and the * operator
      names, ages = zip(*z)
      
      print(f"Names: {list(names)}") # Convert iterators to lists for printing
      print(f"Ages: {list(ages)}")
      

      Output:

      Names: ['Alice', 'Bob', 'Charlie']
      Ages: [30, 25, 35]
      

      When zip(*z) is called, the * operator unpacks the list z into separate arguments: ('Alice', 30), ('Bob', 25), ('Charlie', 35). zip() then takes these tuples as input iterables and combines their first elements into the first output tuple, their second elements into the second output tuple, and so on, effectively transposing the data.

      zip() with Different Iterable Types

      You can zip together iterables of different types.

      list_data = [1, 2, 3]
      tuple_data = ('a', 'b', 'c')
      string_data = "xyz"
      
      zipped_mixed = zip(list_data, tuple_data, string_data)
      
      print(list(zipped_mixed))
      

      Output:

      [(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
      

      Summary

      • The zip() function combines elements from multiple iterables.
      • It returns an iterator of tuples.
      • Each tuple contains elements from the corresponding positions in the input iterables.
      • zip() stops when the shortest iterable is exhausted.
      • Commonly used with for loops or converted to list or dict.
      • Useful for pairing data, iterating over multiple sequences simultaneously, and creating dictionaries.
      • Can be used with the * operator to "unzip" data.

      zip() is a simple yet powerful function that makes working with multiple related sequences much cleaner and more efficient in Python.

      Continue Learning

      Python Variables

      Popular

      Getting Started: Understanding Variables in Python In programming, we often need to store informatio

      Python Tuple

      For You

      Holding Fixed Groups: Understanding Tuples in Python In the previous article, we learned about Lists

      Python Functions Scope

      For You

      Where Variables Live: Understanding Scope In Python, not all variables are accessible from every par

      Personalized Recommendations

      Log in to get more relevant recommendations based on your reading history.