How to Iterate Through a List in Python

What you’ll build or solve

You’ll loop through a Python list and do something with each item, like print it, transform it, or filter it.

When this approach works best

Iterating through a list works well when you:

  • Process each item in a dataset, like names, file paths, or API results.
  • Transform values, like converting strings to numbers or normalizing text.
  • Filter items, like keeping only valid entries or removing duplicates.

Skip this approach when you can use built-in functions that already express your goal, like sum(), any(), or a list comprehension for simple transforms. Those are often shorter and easier to read.

Prerequisites

  • Python 3 installed
  • You know what a list is

Step-by-step instructions

1) Loop through items with for

A for loop is the most common way to iterate through a list.

names = ["Amina", "Luka", "Noor"]

for name in names:
    print(name)

What to look for: The loop variable (name) takes on each value from the list, one at a time.


2) Get the index and the item

Use enumerate() when you need both the position and the value.

names = ["Amina", "Luka", "Noor"]

for i, name in enumerate(names):
    print(i, name)

If you want human-friendly numbering, start at 1.

names = ["Amina", "Luka", "Noor"]

for i, name in enumerate(names, start=1):
    print(i, name)

What to look for: enumerate(..., start=1) changes the first index from 0 to 1.


3) Iterate with a condition or transformation

If you’re building a new list, iterate and collect results.

Option A (common): list comprehension

scores = [10, 0, 25, 30]
non_zero = [s for s in scores if s != 0]

print(non_zero)

Option B: for loop with append() when you need more logic

scores = [10, 0, 25, 30]
non_zero = []

for s in scores:
    if s != 0:
        non_zero.append(s)

print(non_zero)

What to look for: List comprehensions work best for simple transforms or filters. Use a for loop when you need multiple steps or more complex logic.


Examples you can copy

Example 1: Transform each item

words = ["  apple ", "Banana", "CHERRY"]
cleaned = [w.strip().lower() for w in words]

print(cleaned)

Example 2: Build a dictionary from a list

names = ["Amina", "Luka", "Noor"]
name_to_len = {}

for name in names:
    name_to_len[name] = len(name)

print(name_to_len)

Example 3: Filter out empty values

items = ["ok", "", "  ", "valid"]
filtered = [x for x in items if x.strip()]

print(filtered)

Example 4: Stop early when you find a match

numbers = [3, 8, 12, 7, 5]

for n in numbers:
    if n % 2 == 0:
        first_even = n
        break
else:
    first_even = None

print(first_even)

What to look for: The else block runs only if the loop doesn’t hit break.


Example 5: Iterate over two lists at once

names = ["Amina", "Luka", "Noor"]
scores = [42, 38, 50]

for name, score in zip(names, scores):
    print(name, score)

What to look for: zip() stops at the shortest list. If lengths can differ, decide how you want to handle extra items.


Common mistakes and how to fix them

Mistake 1: Modifying a list while iterating over it

What you might do:

nums = [1, 2, 3, 4]

for n in nums:
    if n % 2 == 0:
        nums.remove(n)

Why it breaks: Removing items shifts the remaining elements, so you can skip values.

Correct approach: Create a new list instead.

nums = [1, 2, 3, 4]
nums = [n for n in nums if n % 2 != 0]

print(nums)

Mistake 2: Using range(len(list)) when you don’t need indexes

What you might do:

names = ["Amina", "Luka", "Noor"]

for i in range(len(names)):
    print(names[i])

Why it breaks: It’s easy to make off-by-one mistakes, and the code is harder to read than a direct loop.

Correct approach:

names = ["Amina", "Luka", "Noor"]

for name in names:
    print(name)

If you need indexes, use enumerate():

for i, name in enumerate(names):
    print(i, name)

Mistake 3: Forgetting break and doing extra work

What you might do:

numbers = [3, 8, 12, 7, 5]
first_even = None

for n in numbers:
    if n % 2 == 0:
        first_even = n

Why it breaks: You keep looping, so you end up with the last even number, not the first one.

Correct approach:

numbers = [3, 8, 12, 7, 5]
first_even = None

for n in numbers:
    if n % 2 == 0:
        first_even = n
        break

Troubleshooting

If you see TypeError: 'int' object is not iterable, you’re looping over a single value, not a list. Print the variable and confirm it’s a list.

If your loop misses items, you might be changing the list while iterating. Filter into a new list instead.

If you get IndexError, check if you used indexes like names[i] with a bad range. Prefer for item in items or enumerate().

If nothing prints, confirm the list isn’t empty and confirm your code block actually runs.


Quick recap

  • Use for item in items for the most readable list iteration.
  • Use enumerate(items) when you need indexes.
  • Use a list comprehension for simple filtering or transformation.
  • Avoid mutating a list while iterating over it.
  • Use break when you want to stop after finding what you need.