Skip to main content

How to Subtract a Value from All Numbers in a Python List

This guide explains how to subtract a constant value from every number in a Python list. We'll explore methods for both modifying the list in-place and creating a new list with the modified values. We'll cover list comprehensions, for loops, the map() function, enumerate(), and the NumPy library for efficient numerical operations.

Often, it's best to create a new list with the modified values, leaving the original list unchanged. This is generally safer and more predictable.

Using List Comprehensions (Most Concise)​

List comprehensions are the most Pythonic and often the most readable way to create a new list based on an existing one:

a_list = [5, 15, 25, 35, 45]
subtracted_value = 5
new_list = [item - subtracted_value for item in a_list] # New list created.
print(new_list) # Output: [0, 10, 20, 30, 40]
print(a_list) # Output: [5, 15, 25, 35, 45] # Original list is unchanged.
  • [item - 5 for item in a_list]: This creates a new list. For each item in a_list, it calculates item - 5 and adds the result to the new list.
  • The original list a_list is not modified.

Using map() (Functional Approach)​

The map() function, combined with a lambda, offers a functional programming approach:

a_list = [5, 15, 25, 35, 45]
subtracted_value = 5
new_list = list(map(lambda item: item - subtracted_value, a_list))
print(new_list) # Output: [0, 10, 20, 30, 40]
  • The map() function applies the lambda function to each element and returns a map object which is converted to a list.

Modifying the List In-Place​

If you want to modify the original list directly (be very sure this is what you want!), you can use a loop and indexing.

Using a for Loop and Indexing​

a_list = [5, 15, 25, 35, 45]
subtracted_value = 5

for i in range(len(a_list)):
a_list[i] -= subtracted_value # Modify in place

print(a_list) # Output: [0, 10, 20, 30, 40]
  • The for loop iterates through all indices of the list, using range(len(a_list)).
  • The code then accesses each element of a_list and subtracts subtracted_value from it.

Using enumerate()​

a_list = [5, 15, 25, 35, 45]
subtracted_value = 5

for index, item in enumerate(a_list):
a_list[index] = item - subtracted_value # Modify in place

print(a_list) # Output: [0, 10, 20, 30, 40]
  • enumerate(a_list): This provides both the index and the value of each element in the list.
  • a_list[index] = item - 5: This modifies the list in-place. The original list is changed.
warning

Modifying a list in-place can lead to unexpected behavior if other parts of your code are also referencing the same list. Creating a new list (as seen in first Section) is generally safer.

Using NumPy (for Numerical Lists)​

If you're working with numerical data, NumPy provides a very efficient way to perform this operation:

import numpy as np

arr = np.array([5, 15, 25, 35, 45])
arr = arr - 5 # Subtract 5 from *every* element (in-place)
print(arr) # Output: [ 0 10 20 30 40]

a_list = arr.tolist() # Convert to a Python list if needed.
print(a_list) # Output: [0, 10, 20, 30, 40]
  • arr = arr - 5: NumPy's broadcasting feature allows you to subtract a scalar value from an entire array in a single, highly optimized operation. This modifies the array in-place.
  • If you want to preserve the original array:
    arr = np.array([5, 15, 25, 35, 45])
    new_arr = arr - 5 # Creates a new array.
    print(new_arr) # Output: [0 10 20 30 40]