Extract, Replace, Convert Elements of a List in Python

Modified: | Tags: Python, List

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]

Related Categories

Related Articles