Extract, Replace, Convert Elements of a List in Python
In Python, list comprehensions allow you to create a new list by extracting, removing, replacing, or converting elements from an existing list based on specific conditions.
The sample code in this article uses the following list as an example.
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Refer to the following article for examples involving lists of strings.
You can also randomly sample elements from a list.
Basics of list comprehensions
In Python, you can create a list
using list comprehensions. It is simpler than using the for
loop.
[expression for variable_name in iterable if condition]
expression
is applied to the elements in iterable
(list, tuple, etc.) that satisfy condition
, creating a new list. The if condition
can be omitted; if omitted, expression
is applied to all elements.
See the following article for details on list comprehensions.
Apply operation to all elements of the list
If you write the desired operation in the expression
part of list comprehensions, that operation is applied to all the elements of the list.
l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]
l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']
You can use this to convert a list of numbers to a list of strings. See the following article for details.
Extract/remove elements that meet the conditions from the list
If you just want to select elements by condition
, you do not need to process them with expression
, so you can write it as follows.
[variable_name for variable_name in original_list if condition]
Only elements that satisfy the conditions (returning True
for condition
) are extracted, creating a new list.
l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]
l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]
If if condition
is changed to if not condition
, only elements that do not meet the condition (elements that return False
for condition
) are extracted. This is equivalent to removing elements that meet the condition.
l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
Of course, you can specify an equivalent condition without using not
.
l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]
l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]
You can also connect multiple conditions with or
or and
. Negation not
can also be used.
l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]
l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]
Replace/convert elements that meet the conditions in the list
If you want to replace or convert elements that meet the condition without changing elements that do not meet the condition, use conditional expressions in the expression
part of the list comprehensions.
In Python, conditional expressions can be written as follows:
X if condition else Y
X
is value or expression for True
, and Y
is value or expression for False
.
a = 80
x = 100 if a > 50 else 0
print(x)
# 100
b = 30
y = 100 if b > 50 else 0
print(y)
# 0
Use list comprehensions and conditional expressions:
[X if condition else Y for variable_name in original_list]
The part enclosed in parentheses represents conditional expressions. However, parentheses are not necessary in the actual code.
[(X if condition else Y) for variable_name in original_list]
If you write variable_name
in X
or Y
, the value of the original element is used as it is, and if you write some expression, that expression is applied.
l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]
l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]
l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]
l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]