您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python-查找第二个最小数字

Python-查找第二个最小数字

确实可以修改函数以找到第二个最小的函数

def second_smallest(numbers):
    m1, m2 = float('inf'), float('inf')
    for x in numbers:
        if x <= m1:
            m1, m2 = x, m1
        elif x < m2:
            m2 = x
    return m2

旧版本依赖于Python 2实施细节,该细节None始终排在其他任何东西之前(因此测试为“较小”);我取代了使用float('inf')作为前哨,为无穷大总是测试,@H_502_11@更大的 比任何其它号码。理想情况下,应该使用原始函数float('-inf')代替原始函数None,以免与其他Python实现可能不共享的实现细节相关联。

演示:

>>> def second_smallest(numbers):
...     m1, m2 = float('inf'), float('inf')
...     for x in numbers:
...         if x <= m1:
...             m1, m2 = x, m1
...         elif x < m2:
...             m2 = x
...     return m2
... 
>>> print second_smallest([1, 2, 3, 4])
2

在您发现的函数之外,使用该heapq.nsmallest()函数从迭代器返回两个最小值,并从这两个中选择第二个(或最后一个)值几乎一样有效:

from heapq import nsmallest

def second_smallest(numbers):
    return nsmallest(2, numbers)[-1]

像上面的实现一样,这是一个O(N)解决方案。保持堆变量的每一步都需要logK时间,但是K在这里一个常数(2)!无论您做什么, @H_502_11@都不要使用sort ;这需要O(NlogN)时间。

python 2022/1/1 18:38:35 有255人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶