Last updated: Apr 9, 2024
Reading timeยท4 min
Use a list comprehension to remove elements from a list based on a condition.
The list comprehension will return a new list that doesn't contain any of the elements that don't meet the condition.
my_list = [22, 55, 99, 105, 155, 205] new_list = [item for item in my_list if item > 100] print(new_list) # ๐๏ธ [105, 155, 205]
We used a list comprehension to remove elements from a list based on a condition.
my_list = [22, 55, 99, 105, 155, 205] new_list = [item for item in my_list if item > 100] print(new_list) # ๐๏ธ [105, 155, 205]
On each iteration, we check if the current list item is greater than 100
and
return the result.
The new list will only contain values that are greater than 100
.
The list comprehension doesn't change the original list, it creates a new list.
If you need to change the original list, use a list slice.
my_list = [22, 55, 99, 105, 155, 205] my_list[:] = [item for item in my_list if item > 100] print(my_list) # ๐๏ธ [105, 155, 205]
We used the my_list[:]
syntax to get a slice that represents the entire list,
so we can assign to the variable directly.
my_list[:]
represents the entire list, so when we use it on the left-hand side, we are assigning to the entire list.This approach changes the contents of the original list.
Alternatively, you can use the filter()
function.
This is a three-step process:
filter()
function to filter out elements that don't meet the
condition.list()
class to convert the filter
object to a list.my_list = [22, 55, 99, 105, 155, 205] new_list = list( filter(lambda item: item > 100, my_list) ) print(new_list) # ๐๏ธ [105, 155, 205]
We used the filter()
function to remove elements from a list based on a
condition.
The filter() function takes a function and an iterable as arguments and constructs an iterator from the elements of the iterable for which the function returns a truthy value.
The lambda function gets called with each element in the list, checks if the
value is greater than 100
and returns the result.
The filter
object only contains values that are greater than 100
.
The last step is to use the list() class to
convert the filter
object to a list.
Alternatively, you can use a for
loop.
This is a three-step process:
for
loop to iterate over a copy of the list.list.remove()
method to remove the matching elements.my_list = [22, 55, 99, 105, 155, 205] for item in my_list.copy(): if item <= 100: my_list.remove(item) print(my_list) # ๐๏ธ [105, 155, 205]
100
and use the list.remove()
method to remove the matching elements.The list.remove() method removes the first item from the list whose value is equal to the passed-in argument.
The remove()
method mutates the original list and
returns None.
The most important thing to note when removing items from a list in a for
loop
is to use the list.copy()
method to iterate over a copy of the list.
If you try to iterate over the original list and remove items from it, you might run into difficult-to-locate bugs.
If you need to remove elements from a list based on multiple conditions, use the boolean AND and boolean OR operators.
my_list = [22, 55, 99, 105, 155, 205] new_list = [ item for item in my_list if item > 100 and item < 200 ] print(new_list) # ๐๏ธ [105, 155]
The code sample uses the boolean AND
operator to check for 2 conditions.
When the boolean AND
operator is used, both conditions have to be met for the
element to get included in the new list.
Only elements that are greater than 100
and less than 200
get added to the
list in the example.
If you need to check for multiple conditions where only 1 has to be met, use the
boolean OR
operator.
my_list = [22, 55, 99, 105, 155, 205] new_list = [ item for item in my_list if item > 100 or item == 22 ] print(new_list) # ๐๏ธ [22, 105, 155, 205]
When the boolean OR
operator is used, either condition has to be met for the
element to get added to the new list
You can learn more about the related topics by checking out the following tutorials: