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

如何在Python中移除嵌套列表中的重复元素

移除Python嵌套列表中的重复元素

嘿,这个问题我之前踩过坑!因为列表是可变对象,没办法直接作为set的元素去重——毕竟set只接受可哈希的类型嘛。不过有好几种高效又简单的办法,我给你分享几个常用的:

方法1:转元组用Set去重(简单但打乱顺序)

把每个子列表转成不可变的元组,就能放进set里去重了,最后再转回列表就行:

mylist = [['xxx', 879], ['yyy', 315], ['xxx', 879], ['zzz', 171], ['yyy', 315]]
unique_list = [list(item) for item in set(tuple(sublist) for sublist in mylist)]
print(unique_list)

⚠️ 注意:这个方法会打乱原列表的顺序,因为set是无序的。如果需要保留原始顺序,看下面的方法。

方法2:利用字典插入有序特性(保持顺序,高效)

从Python3.7开始,字典会记住键的插入顺序,我们可以用元组作为字典的键来实现去重,同时保留原始顺序:

mylist = [['xxx', 879], ['yyy', 315], ['xxx', 879], ['zzz', 171], ['yyy', 315]]
# 用dict.fromkeys自动去重,键是元组,最后转回列表
unique_list = [list(key) for key in dict.fromkeys(tuple(sublist) for sublist in mylist)]
print(unique_list)

这个方法时间复杂度是O(n),效率很高,还能完美保留原列表中元素第一次出现的顺序。

方法3:用Pandas处理(适合大数据量)

如果你的列表数据量很大,或者经常需要处理这类结构化数据,用Pandas会更方便,而且同样能保留顺序:

import pandas as pd

mylist = [['xxx', 879], ['yyy', 315], ['xxx', 879], ['zzz', 171], ['yyy', 315]]
# 转成DataFrame,去重后再转回列表
df = pd.DataFrame(mylist)
unique_df = df.drop_duplicates()
unique_list = unique_df.values.tolist()
print(unique_list)

Pandas内部做了优化,处理大规模数据时比纯Python循环快很多。

方法4:手动遍历去重(逻辑清晰,适合自定义)

如果需要自定义去重逻辑,或者想手动控制过程,可以用一个集合记录已经见过的元素:

mylist = [['xxx', 879], ['yyy', 315], ['xxx', 879], ['zzz', 171], ['yyy', 315]]
unique_list = []
seen = set()

for sublist in mylist:
    tuple_sub = tuple(sublist)
    if tuple_sub not in seen:
        seen.add(tuple_sub)
        unique_list.append(sublist)

print(unique_list)

这个方法也能保留原始顺序,逻辑直观,适合新手理解和修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:31:48