You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取两个同结构二维列表的对应子列表交集?

解决方法

嘿,这个需求其实很好实现——核心就是对两个二维列表的对应子列表分别求交集,既然你说它们结构完全一致,那我们可以直接用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:44:56