python – 在第一个元素出现n次后删除子列表

我有一个很长的嵌套列表.每个子列表包含2个元素.我想要做的是迭代完整列表并删除子列表,一旦我找到第一个元素超过3次.

例:

ls = [[1,1], [1,2], [1,3], [1,4], [2,2], [2,3], [3,4], [3,5], [3,6], [3,7]]

desired_result = [[1,1], [1,2], [1,3], [2,2], [2,3], [3,4], [3,5], [3,6]]

最佳答案 如果输入按第一个元素排序,则可以使用
groupby
islice

from itertools import groupby, islice
from operator import itemgetter

ls = [[1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [2, 3], [3, 4], [3, 5], [3, 6], [3, 7]]

result = [e for _, group in groupby(ls, key=itemgetter(0)) for e in islice(group, 3)]
print(result)

产量

[[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 4], [3, 5], [3, 6]]

我们的想法是使用groupby按第一个值对元素进行分组,然后使用islice获取前3个值(如果存在).

点赞