如何实现通用的列表扁平化与去重解决方案?
通用列表扁平化+去重解决方案
你可以通过递归扁平化结合顺序去重的方式实现通用处理,无需针对不同元素类型编写大量分支逻辑,核心思路如下:
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
相关产品推荐
相关产品推荐

