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

Python查找列表第二小整数代码检查及简化方案咨询

原有代码的核心问题

你当前写的实现有几个明显的缺陷,没法满足题目要求:

  • 硬编码了列表长度,多层嵌套的if判断最多只会比较到第5个元素,根本适配不了「数量未知的输入」这个要求
  • 比较逻辑有漏洞,嵌套if的写法只要遇到前一个数比后一个数小,就不会继续往后遍历比较,很容易漏掉更小的值
  • 缩进错误导致print语句被放在了else分支下,部分场景下不会输出任何结果
  • 直接用list做变量名,会覆盖Python内置的列表类型,属于不规范的写法
简化实现方式

简洁写法(推荐日常使用)

因为题目明确约定所有输入数字互不重复,不需要手动写多层比较逻辑,直接用Python内置函数就能实现,代码量极少,逻辑清晰不会出错,适配任意长度≥2的输入。
如果想贴合你原本「先移除最小值,再找剩余列表最小值」的思路,可以这么写:

# 如果是接收控制台输入,可以替换成 nums = list(map(int, input().split()))
nums = [10, 12, 1, 3, 2]
nums.remove(min(nums))
print(min(nums))

更简单的方式是直接对列表排序,升序排序后索引为1的元素就是第二小的整数:

nums = [10, 12, 1, 3, 2]
print(sorted(nums)[1])

这两种写法运行示例列表都会输出正确结果2。

高性能写法(适配超大数据量场景)

如果输入的数字量级很大,排序、多次调用min函数的时间复杂度是O(nlogn),可以用一次遍历的方式把时间复杂度降到O(n),只需要遍历一遍列表,动态维护最小值和第二小值两个变量即可,还能直接利用题目给出的「第一个数始终小于第二个数」的条件做初始化,不需要额外处理边界:

nums = [10, 12, 1, 3, 2]
# 利用题目给定的条件初始化两个变量
smallest = nums[0]
second_smallest = nums[1]

for num in nums[2:]:
    if num < smallest:
        second_smallest = smallest
        smallest = num
    elif num < second_smallest:
        second_smallest = num

print(second_smallest)

这个写法不需要修改原列表,也不需要做全量排序,遍历一次就能得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:36:10