Python:如何仅移除列表中指定元素的重复项保留其余重复项
优雅实现仅移除0的所有重复项
嘿,这个需求很清晰——只删掉所有重复的0,其他元素的重复项完整保留对吧?你的当前方案思路没问题,但可以优化得更简洁或者高效,这里有两种不错的实现方式:
方法一:列表推导式+条件拼接
这种方式把你的两步操作合并成一行,还能兼容原列表中没有0的情况(避免不必要地添加0):
mylist = [4, 1, 2, 6, 1, 0, 9, 8, 0, 9] result = [i for i in mylist if i != 0] + ([0] if 0 in mylist else [])
执行后result就是[4, 1, 2, 6, 1, 9, 8, 9, 0],完美符合需求。这种写法简洁直观,适合大多数场景。
方法二:生成器遍历(单次遍历更高效)
如果你的列表很大,想要更高的执行效率,可以用生成器只遍历一次列表,同时跟踪是否已经保留过0:
def retain_single_zero(lst): zero_kept = False for item in lst: if item != 0: yield item elif not zero_kept: yield item zero_kept = True mylist = [4, 1, 2, 6, 1, 0, 9, 8, 0, 9] result = list(retain_single_zero(mylist))
这个方法的优势是只遍历一次列表,而且完全保持原列表的元素顺序(包括第一个0的位置),执行结果是[4, 1, 2, 6, 1, 0, 9, 8, 9],比第一种方法更贴合原列表的结构。
这两种方法都不用手动计数,比遍历计数的写法更优雅,你可以根据实际场景选择~
内容的提问来源于stack exchange,提问作者Cryn
相关产品推荐
相关产品推荐

