如何在Python中实现保留顺序的字符串列表去重函数?
Python实现保留原顺序的列表去重函数
正确实现方式
用集合跟踪已出现元素的方法既高效又能保证完全去重,同时保留原列表的顺序:
def remove_duplicates(my_list): seen = set() result = [] for item in my_list: if item not in seen: seen.add(item) result.append(item) return result
逻辑说明
- 用
seen集合记录已经添加到结果列表的元素,集合的in操作时间复杂度为O(1),比直接在列表中判断更高效。 - 遍历原列表时,仅当当前元素未在
seen中出现过,才将其加入result并更新seen集合。
测试示例
my_list = ['a', 'b', 'c', 'b', 'd', 'a'] print(remove_duplicates(my_list)) # 输出: ['a', 'b', 'c', 'd']
关于你之前的方法
你提到用for循环遍历并判断元素是否在result列表中再添加的方法无法完全去重,大概率是代码逻辑出现了笔误(比如循环中错误修改了result或原列表)。如果你的代码是类似下面的写法,本身是可以正确去重的,只是效率较低(列表的in操作是O(n)):
# 可行但低效的写法 def remove_duplicates(my_list): result = [] for item in my_list: if item not in result: result.append(item) return result
内容的提问来源于stack exchange,提问作者Dollah Zing
相关产品推荐
相关产品推荐

