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

如何在不使用集合(set)的情况下求列表的交集与并集

实现无重复并集和交集(不使用set)

嘿,很高兴能帮你搞定这个作业问题!咱们一步步来解决这两个函数的实现:

一、无重复并集的实现

你当前的getUnion只是简单拼接两个列表,自然会出现重复元素。要实现无重复的并集,核心思路就是逐个添加元素,但只保留第一次出现的。这里可以通过遍历两个列表,检查元素是否已经在结果列表中来避免重复:

def getUnion(a, b):
    union_list = []
    # 先处理第一个列表的元素
    for item in a:
        if item not in union_list:
            union_list.append(item)
    # 再处理第二个列表的元素,跳过已经存在的
    for item in b:
        if item not in union_list:
            union_list.append(item)
    return union_list

解释:

  • 初始化一个空的union_list用来存储最终的并集结果
  • 先遍历列表a,把所有不在union_list里的元素加进去(就算a内部有重复元素,也能自动去重)
  • 再遍历列表b,同样只添加不在union_list里的元素,彻底避免重复

测试你的示例:

setA = [1,2,3,4,5,6,7,8,9]
setB = [1,5,0,9]
print(getUnion(setA, setB))  # 输出: [1,2,3,4,5,6,7,8,9,0]

二、交集的最佳实现方式

交集的核心是找出同时存在于两个列表中的元素,同样要注意避免重复。这里有两种常见思路,结合可读性和实用性,推荐下面的基础实现:

def getIntersection(a, b):
    intersection_list = []
    for item in a:
        # 检查元素是否在b中,且还没被加入结果列表
        if item in b and item not in intersection_list:
            intersection_list.append(item)
    return intersection_list

解释:

  • 遍历列表a的每个元素
  • 双重条件判断:元素必须在b里,同时还没被添加到intersection_list中(防止a内部有重复元素时,交集结果出现重复)
  • 符合条件的元素加入结果列表

测试示例:

print(getIntersection(setA, setB))  # 输出: [1,5,9]

如果要处理超大列表,还可以优化效率:把其中一个列表转换成字典的键(字典键的查找是O(1),比列表的O(n)快很多),代码如下:

def getIntersection(a, b):
    # 把b转换成字典键,提升查找速度
    b_keys = {item: True for item in b}
    intersection_list = []
    for item in a:
        if item in b_keys and item not in intersection_list:
            intersection_list.append(item)
    return intersection_list

这种优化版本在数据量较大时优势明显,不过作业场景下,基础实现已经足够清晰易懂啦。

内容的提问来源于stack exchange,提问作者user9603529

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:19