如何根据python中的另一个列表过滤列表中的列表元素?



我有一个列表,其中包含一个列表作为元素。现在,当列表元素包含列表中另一个列表中的 3 个以上元素时,我想根据另一个列表过滤列表的元素。为了更好地理解,假设我有一个名为a的列表。

a = [(1, 5, 20, 22, 24, 25), (1, 5, 20, 22, 24, 29), (1, 5, 20, 22, 24, 31), (1, 5, 20, 22, 24, 36), (1, 5, 20, 22, 24, 41), (1, 5, 20, 22, 25, 29)]

现在我有另一个列表,b.

b = [(5,20,24,25,29,36),(1,22,25,29,31,41)]

我想要的是我想删除子列表,即列表a的元素,该元素由子列表b中的 3 个以上元素组成。这里a[0]由 4 个b[0]元素组成,所以我想删除它。我不希望列表 a 中的任何子列表在任一子列表中都有超过 3 个元素b. 我好糊涂,怎么办?

这是蛮力方法。假设与数据中一样,每个子列表中的项目都是唯一的,则可以将set与列表推导式一起使用:

a_sets = list(map(set, a))
b_sets = list(map(set, b))
res = [sublist for idx, sublist in enumerate(a) if not 
any(len(a_sets[idx] & b_set) > 3 for b_set in b_sets)]
[(1, 5, 20, 22, 24, 31), (1, 5, 20, 22, 24, 41)]

最新更新