Python program to remove each y occurrence before x in List

When it is required to remove every 'y' occurrence before 'x' in a list, a list comprehension along with the 'index' method are used. This technique helps filter out specific values that appear before a target element.

Problem Statement

Given a list of elements, we need to remove all occurrences of value 'y' that appear before the first occurrence of value 'x'. Elements after 'x' remain unchanged.

Example

Below is a demonstration of removing all occurrences of 4 before the first occurrence of 8 ?

my_list = [4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]

print("The original list is:")
print(my_list)

x, y = 8, 4

# Find the index of first occurrence of x
index_x = my_list.index(x)

# Remove all y occurrences before x
result = [element for index, element in enumerate(my_list) 
          if element != y or (element == y and index > index_x)]

print("The resultant list is:")
print(result)
The original list is:
[4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]
The resultant list is:
[45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]

How It Works

The solution uses list comprehension with the following logic ?

  • Find the index of the first occurrence of 'x' using index() method
  • Use enumerate() to get both index and element while iterating
  • Keep elements that are either not equal to 'y', or are equal to 'y' but appear after 'x'
  • This effectively removes all 'y' occurrences before the first 'x'

Another Example

Here's another example with different values ?

numbers = [2, 7, 2, 9, 2, 5, 2, 3, 2]

print("Original list:", numbers)

x, y = 5, 2  # Remove all 2's before first 5

try:
    index_x = numbers.index(x)
    result = [num for i, num in enumerate(numbers) 
              if num != y or (num == y and i > index_x)]
    
    print(f"After removing {y} before {x}:", result)
except ValueError:
    print(f"Value {x} not found in the list")
Original list: [2, 7, 2, 9, 2, 5, 2, 3, 2]
After removing 2 before 5: [7, 9, 5, 2, 3, 2]

Error Handling

When the target value 'x' doesn't exist in the list, the index() method raises a ValueError. It's good practice to handle this case ?

data = [1, 3, 1, 5, 1, 7]

x, y = 10, 1  # x=10 doesn't exist

try:
    index_x = data.index(x)
    result = [item for i, item in enumerate(data) 
              if item != y or (item == y and i > index_x)]
    print("Result:", result)
except ValueError:
    print(f"Cannot remove {y} before {x}: {x} not found in list")
Cannot remove 1 before 10: 10 not found in list

Conclusion

This approach efficiently removes all occurrences of a specific value before a target element using list comprehension and enumeration. Always handle the case where the target element might not exist in the list to avoid runtime errors.

Updated on: 2026-03-26T01:49:34+05:30

162 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements