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

递归添加列表唯一元素仅返回首个值,如何修复?

问题分析与修复

你的代码问题在于每次递归调用都会重新创建空的new_set,而且递归返回的结果没有和当前的元素合并——递归得到的去重集合被赋值给bag变量后就没有后续处理,最后返回的始终是当前函数里仅添加了第一个元素的new_set,自然只能拿到第一个值。

下面是两种修复方案:

方案一:传递已收集的集合(推荐,逻辑直观)

通过新增一个可选参数,把已经收集的唯一元素集合传递到递归调用中,避免每次递归都重新创建空列表:

def bag_to_set(bag, current_set=None):
    # 初始化集合,仅在第一次调用时执行
    if current_set is None:
        current_set = []
    if len(bag) > 0:
        # 检查当前元素是否已在集合中,不在则添加
        if bag[0] not in current_set:
            current_set.append(bag[0])
        # 递归处理剩余元素,传递更新后的集合
        return bag_to_set(bag[1:], current_set)
    # 列表为空时返回最终集合
    return current_set

测试示例:

print(bag_to_set([1, 2, 1, 3, 2]))  # 输出 [1, 2, 3]

方案二:合并递归返回结果

不新增参数,而是先递归处理剩余元素得到去重集合,再判断当前元素是否需要加入:

def bag_to_set(bag):
    if not bag:
        return []
    # 先递归处理剩余元素,得到去重后的集合
    rest_set = bag_to_set(bag[1:])
    # 如果当前元素不在递归结果中,就添加到开头(保持原顺序)
    if bag[0] not in rest_set:
        rest_set.insert(0, bag[0])
    return rest_set

测试示例:

print(bag_to_set([1, 2, 1, 3, 2]))  # 输出 [1, 2, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:11:05