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

如何实现通用的列表扁平化与去重解决方案?

通用列表扁平化+去重解决方案

你可以通过递归扁平化结合顺序去重的方式实现通用处理,无需针对不同元素类型编写大量分支逻辑,核心思路如下:

1. 通用扁平化实现

通过递归遍历列表元素,自动识别可迭代的子结构(排除字符串,避免被拆分为单个字符),将嵌套结构逐层展开:

def flatten(lst):
    for item in lst:
        # 判断元素是否为可迭代对象且非字符串
        if hasattr(item, '__iter__') and not isinstance(item, str):
            yield from flatten(item)
        else:
            yield item

这个函数用生成器实现,内存效率更高,能处理任意层级的嵌套结构,无论子元素是列表、元组等可迭代类型,还是数字、布尔值等非迭代类型。

2. 顺序去重处理

扁平化后需要保留元素首次出现的顺序并去重,可通过集合记录已出现元素,同时维护结果列表:

def flatten_and_deduplicate(lst):
    seen = set()
    result = []
    for item in flatten(lst):
        if item not in seen:
            seen.add(item)
            result.append(item)
    return result

测试验证

针对你的示例场景:

  • 输入 [1, 2, 1],输出 [1, 2]
  • 输入 [[1, 2], [2, 1]],输出 [1, 2]

如果需要支持其他特殊类型(比如需要扁平化字符串,或者排除其他可迭代类型),只需修改扁平化函数中的判断条件即可,无需重构整个逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:55:16