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

如何在Python中去除嵌套列表中顺序任意的重复子列表

解决顺序无关的嵌套列表去重问题

这个需求挺常见的,核心思路就是给每个子列表生成一个不随元素顺序变化的唯一标识,然后利用集合自动去重的特性来处理。用Python实现的话,步骤非常清晰:

实现思路

因为列表是可变类型不能直接放进集合,所以我们可以把每个子列表排序后转换成元组(元组是不可变的,可以哈希)——不管元素顺序怎么变,排序后的元组都是一样的,这样就能把顺序不同但元素相同的子列表归为一类。

代码示例

# 你的原始嵌套列表
original_list = [
    ["hello", "bye", "start"],
    ["bye", "start", "hello"],
    ["john", "riya", "tom"],
    ["riya", "john", "tom"]
]

# 用集合存储排序后的元组,自动去重
unique_tuples = {tuple(sorted(sublist)) for sublist in original_list}

# 把元组转回列表,得到最终结果
unique_lists = [list(item) for item in unique_tuples]

print(unique_lists)
# 输出: [['bye', 'hello', 'start'], ['john', 'riya', 'tom']]

补充说明

  • 如果你在意最终子列表的元素顺序和原列表中第一次出现的一致,可以稍微调整写法,用一个集合记录已经处理过的标识,同时遍历原列表收集结果:
seen = set()
unique_lists = []
for sublist in original_list:
    key = tuple(sorted(sublist))
    if key not in seen:
        seen.add(key)
        unique_lists.append(sublist)

print(unique_lists)
# 输出: [['hello', 'bye', 'start'], ['john', 'riya', 'tom']]

这种写法会保留原列表中第一次出现的子列表的元素顺序,而不是排序后的顺序。

  • 这个方法也适用于子列表长度不同的情况,因为长度不同的子列表排序后的元组长度不一样,集合不会把它们判定为重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:58:41