Python Loops (with Examples)

In this article, we will talk about the different kinds of loops in Python, their syntax, and how to use conditional statements to improve Python iterations.

What are Python Loops?

A loop in Python is an instruction that repeats as long as a condition is met.

Python Loops Examples

# while loop
j = 0 
while j < 3:
    print(j)
    j+=1
# For loop
for i in [0,1,2]:
    print(i)

Python Loops Syntax

The syntax of a Python loop includes the keyword that creates the loop (e.g. for, while), the condition and the body of the loop. You will see in the syntax the colon character (:) after the condition that signifies the start of the loop block and a required indentation for each line inside the entire loop block.

Join the Newsletter

    # Python loop syntax
    for elem in condition:
        # body of the loop (indented)
    
    while condition:
        # body of the loop (indented)

    Types of Loops in Python

    There are two types of loops in Python: for loops and while loops.

    The for loop and the while loops are control flow statements used to repeat a block of code following certain conditions.

    • while loop: loop recursively as long as the condition is True
    • for loop: loop each value of a sequence

    When to Use For Loops and While Loops

    The for loop should be used when you need to repeat a block of code for a fixed number of times, or when you want to loop through an iterable object (such as a list).

    The while loop should be used when you need to run a block of code or check a condition at each iteration forever.

    Python While Loop

    The while loop in Python executes a block of code for as long as the condition is True.

    Similar to a if... else... block that would be repeated over and over.

    while condition:
        # do something

    Create a Simple While Loop

    To create a simple while loop in Python, use the while keyword, provide a condition to define when the loop should stop and add the indented code to be executed at each iteration right after the colon character.

    # Simple while loop
    i = 0
    while i < 5:
        print(i)
        i += 1
    
    0
    1
    2
    3
    4

    Infinite While Loops

    By definition, while loops will iterate until a condition is met. If the condition is always True, then the loop will go on infinitely.

    # Infinite Loop
    import time
    
    while True:
        print('This is an infinite loop')
        time.sleep(1)
    

    Breaking a While Loop in Python

    Because the while loop can run infinitely, it is important to provide conditions where the loop should stop. This can be done by providing conditions, such as i < 5, and increment i until it reaches 5, or by using the break control statement.

    # Simple while loop
    i = 0
    while i < 5:
        print(i)
        if i == 2:
            break
        i += 1
    
    0
    1
    2

    While… Else in Python

    A while loop works similarly as an if/else statement (if condition is True, start again). Thus, use the else keyword to define what to do when the while loop stops iterating.

    # While Else
    i = 0
    while i < 5:
        print(i)
        i += 1
    else:
        print('i is greater than 5')
    
    0
    1
    2
    3
    4
    i is greater than 5

    Python For Loops

    The for loop in Python iterates over each element of a sequence in order and executes a block of code at each iteration.

    Example: For each value in a sequence, do something.

    Simple For Loop

    To create a simple for loop in Python, use the for keyword, the element to iterate over, the iterable and add the indented code to be executed at each iteration right after the colon character.

    # Simple for loop
    for i in [1,2,3]:
        print(i)
    
    1
    2
    3

    How to Loop Through a String in Python

    To loop through a string in Python, use the for loop and provide the Python string as the iterable in the for statement.

    # Looping other types
    for letter in 'python':
        print(letter)
    
    p
    y
    t
    h
    o
    n

    Loop Control Statements

    Control statements in Python are used in loops to control the flow of execution based on certain conditions. There are three control flow statements in Python loops: break, continue and pass.

    What is the Break Statement in a Python Loop?

    The break statement is used in a Python loop to stop the execution of the loop when a condition is met.

    # Break
    for letter in 'python':
        print(letter)
        if letter == 'h':
            break
    
    p
    y
    t
    h

    What is the Continue Statement in a Python Loop?

    The continue statement is used in a Python loop to skip the execution of the current iteration and move to the next iteration in the loop.

    # Continue
    for letter in 'python':
        if letter == 'h':
            continue
        print(letter)
    
    p
    y
    t
    o
    n

    What is the Pass Statement in a Loop

    The pass statement is used as a null operator in Python loops and functions to tell the program to do nothing when a condition is met. The pass statement does not stop or skip iterations in loops, but simply does nothing for the current iteration.

    # pass
    for i in [1,2,3]:
        pass
    

    Looping Through the Range() Function

    The range() function is often used in Python for loops to provide a sequence of integers for the for statement to iterate over. It is most often used in for loops to iterate over integer for a defined number of time.

    The Python built-in range() function returns a sequence of numbers, starting from 0 by default.

    Simple Python Range() Loop

    To loop and execute code through a specified number of times, use the range() function in a for loop.

    # Looping a Range
    for i in range(5):
        print(i)
    
    0
    1
    2
    3
    4

    Use Range() Parameters in a Python For Loop

    To modify the starting, end and increment value of the range function in a Python loop, just set each argument of the function in the specified order, and then loop through each element with a for loop.

    # Range Parameters
    rg = range(
            2,  # Start
            20, # End
            2   # Increment
            )
    
    for x in rg:
        print(x)
    
    2
    4
    6
    8
    10
    12
    14
    16
    18

    How to Create Nested For Loops

    To create a nested for loop in Python, simply add an indentation inside a for loop block and specify the additional loop to be made. There are no limits to the number of nested loops you can make in Python.

    Simple Nested For Loop in Python

    To create a simple nested for loop, start with a regular for loop by providing a sequence to iterate over, and inside that loop, create an additional for loop with another sequence to iterate upon.

    By convention, increment the letters used as the identifier of each element of the iteration when creating a nested loop.

    # Nested loop
    for i in ['a','b','c']:
        for j in ['d','e','f']:
            print(i, j)
    
    a d
    a e
    a f
    b d
    b e
    b f
    c d
    c e
    c f

    Loop Through Nested Lists in Python

    To loop through a nested list in Python, use nested for loops.

    # Loop a nested list
    ls = [
        [1,2,3],
        [4,5,6]
    ]
    
    for nst in ls:
        for i in nst:
            print(i)
    
    1
    2
    3
    4
    5
    6

    How to Loop Through a Dictionary in Python

    To loop through a dictionary in Python, use a for loop and give the dictionary as the sequence of the loop. You can also use the .keys(), .values() and .items() method on the dictionary to loop through the sequences that the dictionary methods return.

    Here is an example dictionary on which we will iterate over with a for loop.

    # Create dict
    my_dict = dict(
        name='JC',
        last_name='Chouinard',
        domain='jcchouinard.com',
        twitter='ChouinardJC'
    )
    my_dict
    
    {'name': 'JC',
     'last_name': 'Chouinard',
     'domain': 'jcchouinard.com',
     'twitter': 'ChouinardJC'}

    How to Use Dictionary Methods in For Loops

    Give the dictionary methods’ results as the sequence of the for loop in order to iterate through the keys, the values or the key-value pairs of the Python dictionary.

    • my_dict.keys(): Shows a list-like dict_keys() object of your dictionary keys
    • my_dict.values(): Shows a list-like dict_values() object of your dictionary values
    • my_dict.items(): Shows a list-like dict_items() object with tuples containing dictionary (keys, values)

    How to Loop Through Dictionary Keys

    To loop through Python dictionary keys, use the dictionary as the sequence or use the .keys() method to create the sequence for the for loop to iterate over.

    # Show dictionary keys
    my_dict.keys() 
    
    dict_keys(['name', 'last_name', 'domain', 'twitter'])

    Example of Looping Through Dictionary Keys

    # Print Keys
    for x in my_dict.keys():
        print(x)
    
    name
    last_name
    domain
    twitter

    How to Loop Through Dictionary Values

    To loop through Python dictionary values, use the .values() method to create the sequence for the for loop to iterate over.

    # Values method
    my_dict.values()
    
    dict_values(['JC', 'Chouinard', 'jcchouinard.com', 'ChouinardJC'])

    Example of Looping Through Dictionary Values

    # print values
    for x in my_dict.values():
        print(x)
    
    JC
    Chouinard
    jcchouinard.com
    ChouinardJC

    Example of Accessing Dictionary Values without the .values() method.

    # Print values
    for x in my_dict:
        print(my_dict[x])
    
    JC
    Chouinard
    jcchouinard.com
    ChouinardJC

    How to Loop Through Dictionary Items

    To loop through a Python dictionary key-value pairs, use the .item() method to create the sequence for the for loop to iterate over.

    # Items method
    my_dict.items()
    
    dict_items([('name', 'JC'), ('last_name', 'Chouinard'), ('domain', 'jcchouinard.com'), ('twitter', 'ChouinardJC')])

    Example 1: Looping Through Dictionary Packed Key-Value Pairs

    # Print Keys and values
    for x in my_dict.items():
        print(x[0], x[1])
    
    name JC
    last_name Chouinard
    domain jcchouinard.com
    twitter ChouinardJC

    Example 2: Looping Through Dictionary Unpacked Key-Value Pairs

    # Print Keys and values
    for key, value in my_dict.items():
        print(key, value)
    
    name JC
    last_name Chouinard
    domain jcchouinard.com
    twitter ChouinardJC

    How to Loop Through Iterators in Python

    There are 2 ways to loop through and iterator in Python: using the next() function or using a looping technique such as a for loop or a while loop.

    A Python iterator is an object that can be iterated upon.

    # next()
    ls = ['a','b','c']
    en_object = iter(ls)
    next(en_object)
    
    (0, 'a')
    # Looping an iterator
    ls = ['a','b','c']
    for letter in iter(ls):
        print(letter)
    
    a
    b
    c

    How to Loop Through a Pandas DataFrame in Python

    To loop through a Pandas DataFrame in Python, you can use various methods, such as iterrows(), itertuples(), or simply accessing the DataFrame columns and pass them as the sequence of the for loop.

    # Create DataFrame
    import pandas as pd
    
    df = pd.DataFrame({
        'column_1': [1, 2, 3], 
        'column_2': [4, 5, 6],
        'column_3': [7, 8, 9]
        })
    df
    

    How to Loop Through Pandas DataFrame Column Names

    To loop through the column names of a Pandas DataFrame in Python, you can use the DataFrame or its columns attribute and iterate over it. Here’s an example:

    # Loop each column name
    for column in df:
        print(column)
    
    # Or
    for column in df.columns:
        print(column)
    
    column_1
    column_2
    column_3

    How to Loop Through Rows of a DataFrame with iterrows()

    To loop through the rows of a Pandas DataFrame in Python, you can use the iterrows() function to create the sequence to be used in a for loop.

    The example below shows an example iterator made from a Pandas DataFrame.

    # Iterrows
    df.iterrows()
    
    <generator object DataFrame.iterrows at 0x29ff0a730>
    # Generator object
    next(df.iterrows())
    
    (0,
     column_1    1
     column_2    4
     column_3    7
     Name: 0, dtype: int64)

    Use the format for index,row in df.iterrows() to loop through the rows of a Pandas DataFrame.

    # Looping rows of a Pandas DataFrame
    for index, row in df.iterrows():
        print(f'Index: {index}')
        print(f'Row: {row}')
        print(f'Row Type: {type(row)}')
    
    Index: 0
    Row: column_1    1
    column_2    4
    column_3    7
    Name: 0, dtype: int64
    Row Type: <class 'pandas.core.series.Series'>
    Index: 1
    Row: column_1    2
    column_2    5
    column_3    8
    Name: 1, dtype: int64
    Row Type: <class 'pandas.core.series.Series'>
    Index: 2
    Row: column_1    3
    column_2    6
    column_3    9
    Name: 2, dtype: int64
    Row Type: <class 'pandas.core.series.Series'>

    Access the Value of a Row and Column of a Pandas DataFrame

    # Looping rows of a Pandas DataFrame
    for index, row in df.iterrows():
        print(f'Index: {index}')
        print(f'Row for column 1: {row["column_1"]}')
    
    Index: 0
    Row for column 1: 1
    Index: 1
    Row for column 1: 2
    Index: 2
    Row for column 1: 3

    How to Access the Index in a for Loop

    Python has the built-in enumerate() function that can be used to access the index in a for loop.

    # Accessing the index in a for loop
    ls = ['a','b','c']
    for index, elem in enumerate(ls):
        print(index, elem)
    
    0 a
    1 b
    2 c

    How to Break Multiple Loops in Python

    There are two options to break out multiple loops in Python:

    • using one break statement per loop and complex conditional statements,
    • using the loop inside a function and use the return statement to break all loops.

    Here is an example where the break statement does not break all loops.

    # Breaking out all loops
    for i in range(10):
        for j in ['a','b','c']:
            print(i, j)
            if j == 'b':
                break
    

    If it had broken all loop, only two rows would have been printed. Instead, it broke before the third value ('c') of the nested loop was printed.

    0 a
    0 b
    1 a
    1 b
    ...
    9 a
    9 b

    To break all running loops, run the for loop inside a Python function and use return immediately exits the enclosing function. In the process, all of the loops will be stopped.

    # Breaking out of multiple for loops
    def break_out():
        for i in range(10):
            for j in ['a','b','c']:
                print(i, j)
                if j == 'b':
                    return
    break_out()
    

    The result is the two rows that we want to be printed in this case.

    0 a
    0 b

    What is the Underscore in Python for Loop?

    The underscore (_) is a convention used in a Python for loop to signify that an element will not be used by the code block inside the loop.

    # understand the underscore in loops
    t = [('a',1), ('b',2), ('c',3)]
    
    ls = []
    for letter, _ in t:
        ls.append(letter)
    
    ls
    
    ['a', 'b', 'c']

    How to Avoid For Loops in Python

    Python for loops are very useful to iterate over a sequence, but there are upsides to minimize the usage of for loops:

    1. Reducing the number of lines of code
    2. Making code more readable

    3 Ways to Prevent Using For Loops

    There are three ways to prevent using for loops inside Python code.

    1. List comprehensions
    2. Map + Lambda
    3. Filter + Lambda

    Looping with List Comprehensions

    List comprehensions are a good alternative to replace simple Python for loops and make code more readable. To create a list comprehension, use the square brackets ([]) with the following format:

    [element for element in sequence]

    The list comprehension will return a list object.

    The example below converts a for loop using a more concise list comprehension.

    # For loop
    ls = []
    for i in range(10):
        ls.append(i)
    
    # List Comprehension equivalent
    ls2 = [i for i in range(10)]
    
    print(ls) # for
    print(ls2) # List comprehension
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    Looping with Map + Lambda

    The lambda function can be used inside the map() function to map a sequence to another.

    The example below converts a for loop into a more concise map + lambda result.

    # Doubling a list with a for loop
    ls = []
    
    for i in range(10):
        i *= 2
        ls.append(i)
    
    # Doubling a list with Map + Lambda
    ls2 = map(lambda x: x * 2, range(10))
    
    print(ls)
    print(list(ls2))
    
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

    Looping with Filter + Lambda

    The lambda function can be used inside the filter() function to filter a sequence using conditionals.

    The example below converts a for loop into a more concise filter + lambda result.

    # Get even numbers with for loop
    even = []
    for i in range(10):
        if i % 2 == 0: # Even numbers
            even.append(i)
    
    # Get even numbers Filter + Lambda
    even2 = filter(lambda n: n % 2 == 0, range(10))
    
    print(even)
    print(list(even2))
    
    [0, 2, 4, 6, 8]
    [0, 2, 4, 6, 8]

    Conclusion

    This is the end of this tutorial on Python loops.

    Enjoyed This Post?