**π‘ Problem Formulation:** We aim to write Python programs that efficiently filter and print all negative numbers from a given list. For instance, the input list `[4, -1, -5, 3, -2]`

should output the negative numbers `-1, -5, -2`

.

## Method 1: Using a For Loop

An intuitive way to find negative numbers is iterating over the list with a for loop, checking if each number is negative, and printing it. This procedural approach is straightforward and easy for beginners to understand.

Here’s an example:

numbers = [4, -1, -5, 3, -2] for number in numbers: if number < 0: print(number)

Output: -1 -5 -2

This snippet creates a list of numbers and then iterates over each element. If the element is less than zero, it prints the number. This method is clear and easy to read but might not be the most efficient for very large lists.

## Method 2: Using List Comprehension

List comprehension provides a compact way to process all items in an iterable and select a subset that meets certain criteria. When it comes to finding negative numbers, list comprehensions are both concise and expressive.

Here’s an example:

numbers = [4, -1, -5, 3, -2] negative_numbers = [number for number in numbers if number < 0] print(negative_numbers)

Output: [-1, -5, -2]

This code uses list comprehension to create a new list that contains only the negative numbers from the original list. It’s a single line of code that is both concise and efficient, but it requires an understanding of list comprehensions.

## Method 3: Using the filter() Function

The `filter()`

function in Python is used to create a list of elements for which a function returns true. By passing a lambda function that checks for negativity, one can easily extract all negative numbers.

Here’s an example:

numbers = [4, -1, -5, 3, -2] negative_numbers = list(filter(lambda x: x < 0, numbers)) print(negative_numbers)

Output: [-1, -5, -2]

This code snippet leverages the `filter()`

function to separate the negative numbers from the list. The lambda function serves as a simple, anonymous function that returns true for negative values. This method is more functional in style and can be less intuitive for those not familiar with functional programming paradigms.

## Method 4: Using NumPy Arrays

NumPy is a popular Python library for numerical computing. Its arrays provide vectorized operations, which can be used to filter negative numbers efficiently, especially for large data sets.

Here’s an example:

import numpy as np numbers = np.array([4, -1, -5, 3, -2]) negative_numbers = numbers[numbers < 0] print(negative_numbers)

Output: [-1 -5 -2]

Here, a NumPy array is created from the list of numbers. A boolean index array (`numbers < 0`

) is then used to filter out the negative numbers. This method is extremely efficient for large data sets due to NumPy’s optimized C backend, but it requires the additional NumPy library.

## Bonus One-Liner Method 5: Using a Generator Expression

A generator expression is similar to list comprehension but it generates items one at a time and is more memory-efficient for large lists.

Here’s an example:

numbers = [4, -1, -5, 3, -2] negative_numbers = (number for number in numbers if number < 0) for number in negative_numbers: print(number)

Output: -1 -5 -2

This code creates a generator expression to filter negative numbers and then iterates over the generator to print them. This approach is memory efficient as it does not create a separate list in memory. However, it may be less straightforward than the list comprehension for some users.

## Summary/Discussion

**Method 1: For Loop.**Simple. Beginner-friendly. May be less efficient for very large lists.**Method 2: List Comprehension.**Concise. Expressive. Requires understanding of comprehensions.**Method 3: filter() Function.**Functional style. Good for readability. Less intuitive for non-functional programmers.**Method 4: NumPy Arrays.**Fast for large data. Requires NumPy. Overkill for small lists or simple tasks.**Bonus Method 5: Generator Expression.**Memory-efficient. Generates items on-the-fly. May be confusing to new Python users.