Skip to content

Filter List

Zero-dependency Python snippets for filtering lists using the standard library.

11 snippets available in this sub-category.


Simple

Filter list with condition

list filter condition comprehension data-structures

Filter list based on condition function

def filter_list(lst, condition_func):
    """Filter list based on condition function."""
    return [item for item in lst if condition_func(item)]


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# Filter even numbers
def is_even(x):
    return x % 2 == 0


result = filter_list(numbers, is_even)
print(result)  # [2, 4, 6, 8, 10]

Notes

  • Uses list comprehension
  • Flexible condition function
  • Lambda support
  • Simple and efficient

Filter list with built-in filter

list filter builtin function data-structures

Filter list using built-in filter function

def filter_list_builtin(lst, condition_func):
    """Filter list using built-in filter function."""
    return list(filter(condition_func, lst))


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Filter numbers greater than 5
result = filter_list_builtin(numbers, lambda x: x > 5)
print(result)  # [6, 7, 8, 9, 10]

Notes

  • Uses built-in filter
  • Returns filter object
  • Converts to list
  • Functional approach

Complex

Filter list with multiple conditions

list filter multiple conditions all data-structures

Filter list with multiple conditions (all must be True)

def filter_list_multiple_conditions(lst, conditions):
    """Filter list with multiple conditions (all must be True)."""

    def combined_condition(item):
        return all(condition(item) for condition in conditions)

    return [item for item in lst if combined_condition(item)]


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# Multiple conditions
def is_even(x):
    return x % 2 == 0


def is_greater_than_3(x):
    return x > 3


def is_less_than_8(x):
    return x < 8


conditions = [is_even, is_greater_than_3, is_less_than_8]
result = filter_list_multiple_conditions(numbers, conditions)
print(result)  # [4, 6]

Notes

  • Multiple condition functions
  • All conditions must be True
  • Flexible condition list
  • Combined logic

Filter list with any condition

list filter multiple conditions any data-structures

Filter list with multiple conditions (any can be True)

def filter_list_any_condition(lst, conditions):
    """Filter list with multiple conditions (any can be True)."""

    def combined_condition(item):
        return any(condition(item) for condition in conditions)

    return [item for item in lst if combined_condition(item)]


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# Any condition can be True
def is_even(x):
    return x % 2 == 0


def is_prime(x):
    return x in [2, 3, 5, 7]


conditions = [is_even, is_prime]
result = filter_list_any_condition(numbers, conditions)
print(result)  # [2, 3, 4, 5, 6, 7, 8, 10]

Notes

  • Multiple condition functions
  • Any condition can be True
  • OR logic
  • Flexible filtering

Filter list with custom logic

list filter custom logic context data-structures

Filter list with custom logic function

def filter_list_custom_logic(lst, logic_func):
    """Filter list with custom logic function."""
    return [item for item in lst if logic_func(item)]


def filter_list_with_context(lst, context_func):
    """Filter list with context-aware function."""
    context = {}
    result = []

    for item in lst:
        should_include, context = context_func(item, context)
        if should_include:
            result.append(item)

    return result


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# Custom logic: keep every third number
def every_third(item):
    return item % 3 == 0


result = filter_list_custom_logic(numbers, every_third)
print(result)  # [3, 6, 9]


# Context-aware: keep alternating items
def alternating_filter(item, context):
    context["count"] = context.get("count", 0) + 1
    return context["count"] % 2 == 1, context


result2 = filter_list_with_context(numbers, alternating_filter)
print(result2)  # [1, 3, 5, 7, 9]

Notes

  • Custom filtering logic
  • Context-aware filtering
  • Stateful operations
  • Complex conditions

Filter list by type

list filter type isinstance data-structures

Filter list to keep only items of specified type

def filter_list_by_type(lst, target_type):
    """Filter list to keep only items of specified type."""
    return [item for item in lst if isinstance(item, target_type)]


def filter_list_by_types(lst, target_types):
    """Filter list to keep items of any specified types."""
    return [item for item in lst if any(isinstance(item, t) for t in target_types)]


mixed_data = [1, "hello", 2.5, True, [1, 2], "world", 3, False]

# Filter by single type
strings = filter_list_by_type(mixed_data, str)
print(strings)  # ['hello', 'world']

# Filter by multiple types
numbers = filter_list_by_types(mixed_data, (int, float))
print(numbers)  # [1, 2.5, 3]

Notes

  • Type-based filtering
  • Single or multiple types
  • isinstance checking
  • Type safety

Filter list with index

list filter index position enumerate data-structures

Filter list based on condition that includes index

def filter_list_with_index(lst, condition_func):
    """Filter list based on condition that includes index."""
    return [item for i, item in enumerate(lst) if condition_func(item, i)]


def filter_list_by_position(lst, position_condition):
    """Filter list based on position condition."""
    return [item for i, item in enumerate(lst) if position_condition(i)]


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# Filter based on value and position
def value_and_position_condition(item, index):
    return item > 5 and index % 2 == 0


result = filter_list_with_index(numbers, value_and_position_condition)
print(result)  # [7, 9]


# Filter by position only
def even_positions(index):
    return index % 2 == 0


result2 = filter_list_by_position(numbers, even_positions)
print(result2)  # [1, 3, 5, 7, 9]

Notes

  • Index-aware filtering
  • Position-based filtering
  • Enumerate usage
  • Combined conditions

Filter list with performance monitoring

list filter performance timing monitoring data-structures

Filter list with performance monitoring

import time


def filter_list_with_timing(lst, condition_func, method="comprehension"):
    """Filter list with performance monitoring."""
    start_time = time.time()

    if method == "comprehension":
        result = [item for item in lst if condition_func(item)]
    elif method == "builtin":
        result = list(filter(condition_func, lst))
    elif method == "loop":
        result = []
        for item in lst:
            if condition_func(item):
                result.append(item)
    else:
        raise ValueError("Method must be 'comprehension', 'builtin', or 'loop'")

    end_time = time.time()

    return {
        "result": result,
        "execution_time": end_time - start_time,
        "original_length": len(lst),
        "filtered_length": len(result),
        "method": method,
    }


# Performance comparison
large_list = list(range(100000))


def is_even(x):
    return x % 2 == 0


comp_stats = filter_list_with_timing(large_list, is_even, "comprehension")
builtin_stats = filter_list_with_timing(large_list, is_even, "builtin")
loop_stats = filter_list_with_timing(large_list, is_even, "loop")

print(f"Comprehension: {comp_stats['execution_time']:.6f}s")
print(f"Built-in filter: {builtin_stats['execution_time']:.6f}s")
print(f"Loop: {loop_stats['execution_time']:.6f}s")

Notes

  • Performance measurement
  • Method comparison
  • Benchmarking tool
  • Optimization insights

Filter list with error handling

list filter safe error handling data-structures

Safely filter list with error handling

def filter_list_safe(lst, condition_func):
    """Safely filter list with error handling."""
    try:
        if not isinstance(lst, list):
            raise TypeError("Input must be a list")

        if not lst:
            return []

        result = []
        for item in lst:
            try:
                if condition_func(item):
                    result.append(item)
            except Exception as e:
                print(f"Error evaluating condition for item {item}: {e}")
                continue

        return result

    except Exception as e:
        print(f"Error filtering list: {e}")
        return []  # Return empty list on error


# Safe filtering with error handling
def risky_condition(x):
    if x == 5:
        raise ValueError("Cannot process 5")
    return x > 3


try:
    result = filter_list_safe([1, 2, 3, 4, 5, 6], risky_condition)
    print(result)  # [4, 6] (5 is skipped due to error)
except Exception as e:
    print(f"Error: {e}")

Notes

  • Comprehensive error handling
  • Type validation
  • Graceful degradation
  • Production ready

Filter list with memory optimization

list filter memory optimization generator data-structures

Filter list using generator for memory efficiency

def filter_list_generator(lst, condition_func):
    """Filter list using generator for memory efficiency."""
    for item in lst:
        if condition_func(item):
            yield item


def filter_list_memory_efficient(lst, condition_func, threshold=10000):
    """Filter list with memory optimization."""
    # Use generator for large lists
    if len(lst) > threshold:
        return list(filter_list_generator(lst, condition_func))
    else:
        return [item for item in lst if condition_func(item)]


# Memory efficient filtering
large_list = list(range(100000))


def is_even(x):
    return x % 2 == 0


# Generator approach for large lists
count = 0
for item in filter_list_generator(large_list, is_even):
    count += 1
    if count >= 1000:  # Process only first 1000 even numbers
        break

print(f"Processed {count} even numbers")

# Convert to list if needed
result = list(filter_list_generator(large_list[:1000], is_even))
print(len(result))  # 500

Notes

  • Memory efficient
  • Generator pattern
  • Suitable for large lists
  • Lazy evaluation

Filter list with transformation

list filter transform conditional data-structures

Filter list and optionally transform filtered items

def filter_list_with_transform(lst, condition_func, transform_func=None):
    """Filter list and optionally transform filtered items."""
    if transform_func is None:
        def transform_func(x):
            return x

    return [transform_func(item) for item in lst if condition_func(item)]


def filter_list_conditional_transform(
    lst, condition_func, true_transform=None, false_transform=None
):
    """Filter list with conditional transformation."""
    if true_transform is None:
        def true_transform(x):
            return x
    if false_transform is None:
        def false_transform(x):
            return x

    result = []
    for item in lst:
        if condition_func(item):
            result.append(true_transform(item))
        else:
            result.append(false_transform(item))

    return result


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# Filter and transform
def is_even(x):
    return x % 2 == 0


def square(x):
    return x**2


result = filter_list_with_transform(numbers, is_even, square)
print(result)  # [4, 16, 36, 64, 100]


# Conditional transform
def is_greater_than_5(x):
    return x > 5


result2 = filter_list_conditional_transform(
    numbers,
    is_greater_than_5,
    true_transform=lambda x: x * 2,  # Double if > 5
    false_transform=lambda x: x // 2,  # Halve if <= 5
)
print(result2)  # [0, 1, 1, 2, 2, 12, 14, 16, 18, 20]

Notes

  • Combined filter and transform
  • Conditional transformation
  • Flexible operations
  • Efficient processing

🔗 Cross-References

🏷️ Tags

list, filter, condition, performance, memory, transform, data-structures

📝 Notes

  • List comprehension is most efficient for simple filtering
  • Generators provide memory efficiency for large lists
  • Built-in filter function offers functional approach
  • Custom logic enables complex filtering scenarios
  • Always validate input for production use
  • Consider performance implications for very large lists