
When "k" is Enough!
Given a list of items, some of which may be duplicated, create and return a new Iterable that is otherwise the same as items, but only up to k occurrences of each element are kept, and all occurrences of that element after those first k are discarded. Note also the counterintuitive but still completely legitimate edge case of k == 0 that has a well defined answer of an empty list!
Input: A list and an integer.
Output: List or another Iterable (tuple, iterator, generator).
Examples:
assert list(remove_after_kth([42, 42, 42, 42, 42, 42, 42], 3)) == [42, 42, 42] assert list(remove_after_kth([42, 42, 42, 99, 99, 17], 0)) == [] assert list(remove_after_kth([1, 1, 1, 2, 2, 2], 5)) == [1, 1, 1, 2, 2, 2]
This task is taken from the course CCPS 109 Computer Science I, as taught by Ilkka Kokkarinen.