如何在Python中删除列表重复元素,仅保留每个元素的单个实例?
如何移除列表中的重复元素,仅保留每个元素的一个实例?
嘿,这个需求在Python里有好几种实用的实现方式,不管你的列表里重复元素有多少,都能轻松搞定!我结合你的例子[1,1,1,1,2,2,2,2,3,3,3,3],给你拆解几种常用方法:
方法1:利用集合(Set)快速去重
集合的核心特性就是不允许重复元素,所以直接把列表转成集合再转回列表就能完成去重。不过要注意:
- Python 3.7及以上版本中,集合转列表会保留元素的插入顺序;低于3.7的版本顺序可能会打乱。
- 这个方法只适用于列表元素是可哈希类型(比如数字、字符串、元组),如果有嵌套列表这类不可哈希元素就用不了。
代码示例:
original_list = [1,1,1,1,2,2,2,2,3,3,3,3] unique_list = list(set(original_list)) print(unique_list) # 输出 [1,2,3](Python3.7+保持顺序)
方法2:遍历手动维护唯一列表(兼容所有场景)
如果需要严格保持原列表的元素顺序,或者列表里有不可哈希元素,就可以用这种“笨但可靠”的方法:遍历原列表,把没出现过的元素添加到新列表里。
代码示例:
original_list = [1,1,1,1,2,2,2,2,3,3,3,3] unique_list = [] for item in original_list: if item not in unique_list: unique_list.append(item) print(unique_list) # 输出 [1,2,3]
小缺点:如果列表非常大,item not in unique_list的查找效率会偏低(列表查找是O(n)复杂度)。
方法3:用dict.fromkeys()实现高效有序去重(Python3.7+推荐)
从Python3.7开始,字典会保留插入顺序,而dict.fromkeys()方法会自动忽略重复的键。用这个特性去重,既保证顺序,又有字典O(1)的查找效率,是处理可哈希元素的最优解之一。
代码示例:
original_list = [1,1,1,1,2,2,2,2,3,3,3,3] unique_list = list(dict.fromkeys(original_list)) print(unique_list) # 输出 [1,2,3]
方法4:itertools.groupby()(适合已排序列表)
如果你的列表已经是排序好的(就像题目里的例子),用itertools.groupby()会很方便——它会把连续的重复元素分组,我们只需要取每组的键就行。
代码示例:
from itertools import groupby original_list = [1,1,1,1,2,2,2,2,3,3,3,3] unique_list = [key for key, group in groupby(original_list)] print(unique_list) # 输出 [1,2,3]
⚠️ 注意:如果列表未排序,这个方法会失效!比如列表是[1,2,1],用groupby会得到[1,2,1],因为它只会处理连续的重复项。
内容的提问来源于stack exchange,提问作者Vivek Sivaramakrishnan
相关产品推荐
相关产品推荐

