我有一个列表,其中包含一个列表作为元素。现在,当列表元素包含列表中另一个列表中的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]
由b[0]
中的4个元素组成,所以我想删除它。我不希望列表a中的任何子列表在b
的任一子列表中具有3个以上的元素。
我很困惑,我该怎么办?
答案 0 :(得分:0)
这是蛮力方法。假设像您的数据一样,每个子列表中的项目都是唯一的,则可以将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)]