Remove the first N items that match a condition in a Python list

If I have a function matchCondition(x), how can I remove the first n items in a Python list that match that condition?

One solution is to iterate over each item, mark it for deletion (e.g., by setting it to None), and then filter the list with a comprehension. This requires iterating over the list twice and mutates the data. Is there a more idiomatic or efficient way to do this?

    n = 3

    def condition(x):
        return x < 5

    data = [1, 10, 2, 9, 3, 8, 4, 7]
    out = do_remove(data, n, condition)
    print(out)  # [10, 9, 8, 4, 7] (1, 2, and 3 are removed, 4 remains)

One way using itertools.filterfalse and itertools.count:

    from itertools import count, filterfalse

    data = [1, 10, 2, 9, 3, 8, 4, 7]
    output = filterfalse(lambda L, c=count(): L < 5 and next(c) < 3, data)

Then list(output), gives you:

    [10, 9, 8, 4, 7]

From: stackoverflow.com/q/39580063

Back to homepage or read more recommendations: