Remove the first N items that match a condition in a Python list
<p>If I have a function <code>matchCondition(x)</code>, how can I remove the first <code>n</code> items in a Python list that match that condition?</p>

<p>One solution is to iterate over each item, mark it for deletion (e.g., by setting it to <code>None</code>), 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?</p>

<pre><code>n = 3

def condition(x):
    return x &lt; 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)
</code></pre>

<p>One way using <a href="https://docs.python.org/3/library/itertools.html#itertools.filterfalse"><code>itertools.filterfalse</code></a> and <a href="https://docs.python.org/3/library/itertools.html#itertools.count"><code>itertools.count</code></a>:</p>

<pre><code>from itertools import count, filterfalse

data = [1, 10, 2, 9, 3, 8, 4, 7]
output = filterfalse(lambda L, c=count(): L &lt; 5 and next(c) &lt; 3, data)
</code></pre>

<p>Then <code>list(output)</code>, gives you:</p>

<pre><code>[10, 9, 8, 4, 7]
</code></pre>

python list list-comprehension