Python如何展平任意嵌套列表并提取唯一元素?
解决任意深度嵌套列表的唯一元素提取问题
刚好碰到过类似的需求——从多层嵌套的列表里把所有非列表元素捞出来,还要去重。之前找的方案大多只支持二维列表,根本处理不了这种套娃式的嵌套,用递归就完美解决了,给你看完整的实现:
def extract_unique_elements(lst): unique = [] def recursion_occurs_here(element): for item in element: if isinstance(item, list): recursion_occurs_here(item) else: unique.append(item) recursion_occurs_here(lst) return set(unique)
简单说下思路:
- 内部的
recursion_occurs_here函数负责递归遍历:碰到列表就继续往里钻,碰到非列表元素就塞进收集列表里 - 最后把收集到的所有元素转成集合,自动帮我们完成去重,刚好就是你要的结果
测试一下你给的例子:
print(extract_unique_elements([2,[[2,4,5],"c",[[["c","d"]]]]])) # 输出: {2, 4, 5, 'c', 'd'}
如果想优化下效率,也可以直接用集合来收集元素,省去最后转集合的步骤:
def extract_unique_elements(lst): unique = set() def recursion_occurs_here(element): for item in element: if isinstance(item, list): recursion_occurs_here(item) else: unique.add(item) recursion_occurs_here(lst) return unique
这样每找到一个元素直接加入集合,不用先存列表再转换,性能会好一点点~
内容的提问来源于stack exchange,提问作者Rohan Trivedi
相关产品推荐
相关产品推荐

