如何获取两个同结构二维列表的对应子列表交集?
解决方法
嘿,这个需求其实很好实现——核心就是对两个二维列表的对应子列表分别求交集,既然你说它们结构完全一致,那我们可以直接用zip()来配对每个位置的子列表,再逐个处理。
两种实现方式
方式1:简洁的集合交集法(不保留元素顺序)
这种写法代码短,但会打乱子列表里元素的原始顺序,同时会自动去重(如果你的子列表有重复元素的话):
list1 = [[1,2,3], [], [4,5], []] list2 = [[1,2], [7], [4,5], []] result = [list(set(sublist1) & set(sublist2)) for sublist1, sublist2 in zip(list1, list2)] print(result) # 输出: [[1,2], [], [4,5], []]
方式2:保留元素顺序的列表推导式
如果你需要保持子列表元素在list1里的原始顺序,或者子列表存在重复元素需要保留,就用这种写法:
list1 = [[1,2,3], [], [4,5], []] list2 = [[1,2], [7], [4,5], []] result = [[x for x in sublist1 if x in sublist2] for sublist1, sublist2 in zip(list1, list2)] print(result) # 输出: [[1,2], [], [4,5], []]
为什么这样可行?
zip(list1, list2)会把两个列表中相同索引位置的子列表配对成元组,比如第一个元组是([1,2,3], [1,2]),第二个是([], [7]),以此类推。- 内层的处理逻辑(不管是集合交集还是列表推导式)都是在对每一对子列表求交集:
- 空列表和任何列表的交集都是空列表,所以刚好保留了你示例里的空值。
- 有元素的子列表会筛选出同时存在于两个子列表中的元素。
内容的提问来源于stack exchange,提问作者Carlo Pazolini
相关产品推荐
相关产品推荐

