Python中移除列表内重复子列表的简便方法及内置函数咨询
列表的列表去重:没有直接内置函数,但有简洁的内置工具组合方案
好问题!首先得明确:Python没有专门针对列表的列表去重的内置函数——这是因为普通的集合(set)只能处理可哈希的元素,而列表是可变类型,没法直接作为集合的元素。不过我们可以用Python内置的工具组合起来,轻松实现这个需求,比自己写循环判断要高效得多。
下面是几种常用的实现方式:
1. 快速去重(不保留原顺序)
把每个子列表转换成可哈希的元组,利用集合自动去重的特性,再转回到列表:
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']] y = [list(t) for t in set(tuple(sublist) for sublist in x)] print(y) # 输出示例(顺序可能和原列表不同):[['sdf', 'wqd'], ['aaron', 'jeng']]
2. 保留首次出现的顺序(推荐)
如果需要保留原列表中子列表第一次出现的顺序,可以用一个临时集合记录已经见过的子列表(转成元组存储),再构建结果列表:
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']] seen = set() y = [] for sublist in x: sub_tuple = tuple(sublist) if sub_tuple not in seen: seen.add(sub_tuple) y.append(sublist) print(y) # 输出:[['aaron', 'jeng'], ['sdf', 'wqd']]
3. 简洁的顺序保留写法(Python 3.7+)
利用Python 3.7+中字典有序且键唯一的特性,用dict.fromkeys快速去重:
x = [['aaron','jeng'],['sdf','wqd'],['aaron','jeng']] y = list(map(list, dict.fromkeys(map(tuple, x)))) print(y) # 输出:[['aaron', 'jeng'], ['sdf', 'wqd']]
这些方法都是基于Python内置的set、tuple、dict等工具实现的,不需要额外写复杂的逻辑,完全满足你的需求。
内容的提问来源于stack exchange,提问作者OmK
相关产品推荐
相关产品推荐

