Python函数remove_duplicates返回空列表,求问题原因排查
问题分析与修复方案
让我来帮你拆解这段代码里的问题,为啥会返回空列表~
首先看你的原代码:
def remove_duplicates(sequence): k = [] for x in sequence: for i in k: if x != i: k.append(x) else: k = k return k
核心错误点
- 内层循环的执行时机问题:当
k是空列表时,for i in k这个循环根本不会运行。也就是说,第一个元素进入外层循环时,内层循环直接跳过,没有任何代码把它添加到k里。后面的元素也一样,k始终是空,最后自然返回[]。 - 内层循环逻辑完全错误:就算
k里有元素,你的逻辑是「只要和k里某一个元素不相等,就把x加进去」——这会导致重复添加。比如k里已经有[1],x=2时会被正常添加;但如果k里是[1,2],x=2时,第一个对比i=1,因为x!=i就会把2又append进去,变成[1,2,2],之后对比i=2时的else操作(k = k)完全是无效的,对列表没有任何改变。
修复后的代码
方案1:保持原列表顺序的去重(推荐)
这个写法直接检查元素是否已在结果列表中,不在就添加,逻辑清晰且保留原始顺序:
def remove_duplicates(sequence): k = [] for x in sequence: if x not in k: k.append(x) return k
方案2:不关心顺序的快速去重
如果不需要保持元素的原始顺序,可以利用Python集合自动去重的特性,代码更简洁:
def remove_duplicates(sequence): return list(set(sequence))
注意:集合是无序的,所以这个方法会打乱原列表的元素顺序,比如输入[2,1,2],返回的可能是[1,2]或[2,1]。
内容的提问来源于stack exchange,提问作者Green Dreams
相关产品推荐
相关产品推荐

