首页 > 解决方案 > 在第一个元素出现 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]]

标签: python

解决方案


如果输入按第一个元素排序,则可以使用groupbyislice

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,然后使用 获取前 3 个值(如果存在)islice


推荐阅读