如何编写Python函数对列表去重,返回包含所有唯一元素的列表?
代码错误原因与修复方案
原代码存在两处核心逻辑错误,直接导致输出不符合预期:
- 循环内遇到重复元素直接执行
return(x),会立刻终止函数运行,直接返回第一个遇到的重复元素,不会继续遍历处理列表后续内容 - 判断条件
lst.count(x) == 1逻辑不符合去重要求:该条件只会把原列表中仅出现1次的元素加入结果,而去重需求是每个元素无论原本出现多少次,最终仅保留1次
你调用测试用例时,第一个遍历到的元素是row,调用lst.count('row')得到的结果是2,触发else分支直接返回row,这就是你得到当前输出的原因。
修复实现
方案1:保留元素首次出现的顺序(推荐,符合你给出的预期输出顺序)
如果需要保留列表中元素第一次出现的先后顺序,使用如下实现:
def make_unique(lst: list[str]) -> list[str]: res = [] for item in lst: # 仅当元素还没被加入结果列表时才添加 if item not in res: res.append(item) return res
调用print(make_unique(lst=['row','mun','row'])),输出为['row', 'mun'],完全符合预期。
方案2:无需保留顺序(实现最简单)
如果不需要保留原有元素的排列顺序,可以直接利用集合自动去重的特性,代码更简洁:
def make_unique(lst: list[str]) -> list[str]: return list(set(lst))
注意该方案输出的元素顺序不固定,Python 3.7+版本中虽然set也有插入顺序,但仍不建议依赖该特性做顺序敏感的去重。
内容的提问来源于stack exchange,提问作者Joshua Bradley
相关产品推荐
相关产品推荐

