Python Filter Data from a List Example

Filtering a list means creating a new list that keeps only the items you want.

This example shows simple beginner-friendly ways to filter data from a Python list using:

  • a for loop
  • an if statement
  • a list comprehension

If you are new to loops and conditions, this is a good place to start before reading more detailed guides on Python for loops and Python if statements.

Quick example

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers)

Output:

[2, 4, 6]

Use a list comprehension when you want to create a new list that keeps only matching items.

What this example shows

  • How to create a new list from an existing list
  • How to keep only items that match a condition
  • How filtering does not change the original list unless you reassign it
  • When to use a loop vs a list comprehension

Example 1: Filter with a for loop

A for loop is often the easiest way to understand filtering.

The basic idea is:

  1. Start with an empty list
  2. Loop through the original list
  3. Check each item with an if statement
  4. Add matching items to the new list
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = []

for number in numbers:
    if number % 2 == 0:
        even_numbers.append(number)

print("Original list:", numbers)
print("Filtered list:", even_numbers)

Output:

Original list: [1, 2, 3, 4, 5, 6]
Filtered list: [2, 4, 6]

Why this works

  • numbers is the original list
  • even_numbers = [] creates an empty result list
  • for number in numbers: checks each item one by one
  • if number % 2 == 0: keeps only even numbers
  • even_numbers.append(number) adds matching items to the result

The key line is:

if number % 2 == 0:

That condition returns True only for even numbers.

If you want to learn more about adding items to a list, see Python list.append().

Example 2: Filter with a list comprehension

After you understand the loop version, you can write the same logic in one line with a list comprehension.

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [number for number in numbers if number % 2 == 0]

print("Original list:", numbers)
print("Filtered list:", even_numbers)

Output:

Original list: [1, 2, 3, 4, 5, 6]
Filtered list: [2, 4, 6]

This version is shorter, but it does the same job:

  • loop through numbers
  • test each item
  • keep only matching items

Use a list comprehension when the condition is short and easy to read.

For more practice, read how to use list comprehensions in Python.

Common filtering conditions

You can filter lists in many ways. Here are a few simple patterns.

Numbers greater than a value

numbers = [3, 8, 12, 1, 20]
result = [n for n in numbers if n > 10]
print(result)

Output:

[12, 20]

Even or odd numbers

numbers = [1, 2, 3, 4, 5, 6]
odd_numbers = [n for n in numbers if n % 2 != 0]
print(odd_numbers)

Output:

[1, 3, 5]

Strings that contain a word

words = ["apple pie", "banana", "green apple", "orange"]
result = [word for word in words if "apple" in word]
print(result)

Output:

['apple pie', 'green apple']

Strings that start with a letter

names = ["Alice", "Bob", "Anna", "Charlie"]
result = [name for name in names if name.startswith("A")]
print(result)

Output:

['Alice', 'Anna']

Items that are not empty

items = ["book", "", "pen", "", "paper"]
result = [item for item in items if item != ""]
print(result)

Output:

['book', 'pen', 'paper']

Expected output and why it works

When you filter a list, it helps to print both the original list and the new list.

names = ["Anna", "Ben", "Alex", "Cara"]
filtered_names = []

for name in names:
    if name.startswith("A"):
        filtered_names.append(name)

print("Original list:", names)
print("Filtered list:", filtered_names)

Output:

Original list: ['Anna', 'Ben', 'Alex', 'Cara']
Filtered list: ['Anna', 'Alex']

Why it works:

  • The original list stays the same
  • Only matching items are added to filtered_names
  • The condition is the part that decides what stays

In this example, the important line is:

if name.startswith("A"):

Only names that start with "A" are added to the new list.

If you want a step-by-step guide for this task, see how to filter a list in Python.

Beginner mistakes to avoid

Here are some common problems when filtering lists.

Forgetting to create a new list

This will fail because result does not exist yet:

numbers = [1, 2, 3]

for number in numbers:
    if number > 1:
        result.append(number)

Create the list first:

numbers = [1, 2, 3]
result = []

for number in numbers:
    if number > 1:
        result.append(number)

print(result)

Using = instead of ==

This is wrong inside a condition:

if number = 2:

Use == to compare values:

if number == 2:

Expecting the original list to change automatically

Filtering usually creates a new list.

numbers = [1, 2, 3, 4]
result = [n for n in numbers if n > 2]

print(numbers)
print(result)

Output:

[1, 2, 3, 4]
[3, 4]

The original list is still [1, 2, 3, 4].

Writing a condition that returns the wrong type

Conditions should evaluate to True or False.

Good:

if number > 3:

Less useful for filtering logic:

if number + 3:

That second example produces a value, but it does not clearly express the rule you want.

Confusing filtering with sorting

Filtering removes items that do not match a condition.

Sorting changes the order of items.

These are different tasks.

Common causes of filtering problems

Many beginner errors come from a small number of causes:

  • Trying to remove items from the same list while looping over it
  • Using append() on a variable that was not created as a list
  • Writing an invalid condition inside the loop or comprehension
  • Mixing numbers and strings in a comparison without conversion

For example, this can cause problems:

items = [1, "2", 3]

for item in items:
    if item > 1:
        print(item)

In this list, some items are numbers and one is a string. Python cannot always compare them directly in a useful way.

Debugging tips

If your filtering code does not work, print values as the loop runs.

Useful debug lines:

print(items)
print(item)
print(result)
print(type(item))
print(item % 2 == 0)

Example:

numbers = [1, 2, 3, 4]
result = []

for item in numbers:
    print("Current item:", item)
    print("Is even?", item % 2 == 0)

    if item % 2 == 0:
        result.append(item)

print("Final result:", result)

This helps you see:

  • what each item is
  • whether the condition is True or False
  • what gets added to the result list

FAQ

What is the easiest way to filter a list in Python?

For beginners, use a for loop with an if statement. After that, learn the list comprehension version.

Does filtering change the original list?

Not unless you assign the result back to the same variable. Usually filtering creates a new list.

Should I use filter() for this page?

No. This example focuses on loops and list comprehensions because they are easier for beginners to read.

Can I filter a list of strings?

Yes. You can keep only strings that match a condition, such as containing a word or starting with a letter.

See also

Try changing the examples in this page to make your own filters:

  • keep numbers greater than 10
  • keep only odd numbers
  • keep strings that contain "cat"
  • keep names that start with "B"

That is the main skill: write a condition, test each item, and keep only the ones that match.