You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表去重后升序返回的代码优化及实现方法咨询

问题描述

我最近刚开始学习for循环以及lists(列表)的使用,刚完成了一道布置的练习题,过程中觉得难度较高。我想把这道题和我的实现方案分享给大家,希望大家能给我一些代码优化的建议,或是提供其他解决该问题的思路,感谢大家的帮助。我刚接触编程和Stack Overflow,若有操作不当还请见谅。

题目要求

编写一个接收自然数列表的函数,校验该列表是否存在重复数字,若存在则移除重复项。函数最终需要返回无重复元素的对应列表,且返回的列表需按升序排列。

我的实现代码

def remove_repeated_numbers(z):
    x = 1
    for i in z:
        y = x
        while y <= (len(z) - 1):
            if i == z[y]:
                del z[y]
                y = (y - 1)              #Once z[y] is deleted, should check same spot again
            y = (y + 1)
        x = (x + 1)
    list_finished = sorted(z[:])
    return list_finished

def main():
    run = True
    z = []
    while run:
        u = int(input("Entry value: "))
        if u != 0:
            z.append(u)
        else:
            run = False
    print(remove_repeated_numbers(z))

main()
优化建议
  • 你当前的代码功能是可以正常跑通的,但存在两个可优化的点:一是直接修改传入的原列表,会产生隐含副作用,如果函数调用方后续还要使用原始输入列表,数据就会被破坏;二是两层嵌套循环的时间复杂度为O(n²),当列表元素量很大的时候运行效率会很低。
  • 针对去重+升序输出的需求,Python有非常简洁的实现方式,利用集合(set)天然去重的特性,搭配sorted方法一行就能完成核心逻辑:
def remove_repeated_numbers(z):
    return sorted(set(z))
  • 如果你希望自己实现去重逻辑、不直接依赖set的特性,可以用额外集合存储已出现的元素,仅需一次遍历就能完成去重,时间复杂度降到O(n):
def remove_repeated_numbers(z):
    seen = set()
    result = []
    for num in z:
        if num not in seen:
            seen.add(num)
            result.append(num)
    return sorted(result)
  • main函数也可以简化,不需要单独声明run变量,直接用while True加break逻辑更清晰,额外加上if __name__ == "__main__"是Python的通用最佳实践,避免脚本被其他文件导入时自动执行main函数:
def main():
    z = []
    while True:
        u = int(input("Entry value: "))
        if u == 0:
            break
        z.append(u)
    print(remove_repeated_numbers(z))

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者fabinfabinfabin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:30:05