Skip to content
Related Articles

Related Articles

Python | Remove first K elements matching some condition

View Discussion
Improve Article
Save Article
  • Last Updated : 30 Dec, 2018

Removal of elements in list can be performed using many inbuilt functions. Removing all or just a single occurrence removal both functions are present in Python library. This article discusses to remove just the first K occurrences of elements matching particular condition.

Method #1 : Naive Method
We can append the elements that are matching condition after K occurrences of elements have been done and hence would perform the task similar to the removal.




# Python3 code to demonstrate 
# to remove first K elements matching condition
# using Naive Method 
  
# initializing list
test_list = [3, 5, 1, 6, 7, 9, 8, 5]
  
# printing original list
print ("The original list is : " + str(test_list))
  
# using Naive Method 
# to remove first K elements matching condition 
# removes first 4 odd occurrences
counter = 1
res = []
for i in test_list:
    if counter > 4 or not (i % 2 != 0):
        res.append(i)
    else:
        counter += 1
  
# printing result
print ("The filtered list is : " + str(res))

Output:

The original list is : [3, 5, 1, 6, 7, 9, 8, 5]
The filtered list is : [6, 9, 8, 5]

 
Method #2 : Using itertools.filterfalse() + itertools.count()
This is different and elegant way to perform this particular task. It filters out all the numbers that become greater than K as counter reaches K and matches against the condition. This is one-liner and preferred method to achieve this task.




# Python3 code to demonstrate 
# to remove first K elements matching condition
# using itertools.filterfalse() + itertools.count()
from itertools import filterfalse, count
  
# initializing list
test_list = [3, 5, 1, 6, 7, 9, 8, 5]
  
# printing original list
print ("The original list is : " + str(test_list))
  
# using itertools.filterfalse() + itertools.count()
# to remove first K elements matching condition 
# removes first 4 odd occurrences
res = filterfalse(lambda i, counter = count(): i % 2 != 0 and
                                next(counter) < 4, test_list)
  
# printing result
print ("The filtered list is : " + str(list(res)))

Output:

The original list is : [3, 5, 1, 6, 7, 9, 8, 5]
The filtered list is : [6, 9, 8, 5]

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!