在python中使用循环查找第二个最小的数字

时间:2015-09-28 18:07:25

标签: python loops function

我想知道如何从具有def函数的用户输入列表中找到第二小数。此外, WITHOUT 使用任何排序函数,导入的模块以及min()和max()函数,如何通过使用循环和关系运算符来查找数字?

这是我的以下代码(到目前为止我只找到了最小的数字......):

def second_smallest():
    smallest = second_smallest[0]
    for i in second_smallest[1:]:
        if smallest > i:
            smallest = i
    return smallest

显示以下测试的示例:

print(second_smallest([5, 7, 2, 1, 3]))
2
print(second_smallest([100, 51, 31, 5, 10]))
10

谢谢!

2 个答案:

答案 0 :(得分:0)

>>> def second_smallest(lst):
...     first = second = float("inf")
...     for num in lst:
...         if num < first:
...             second, first = first, num
...         elif first < num < second:
...             second = num
...     return second

请注意,对于float('inf')的列表,这会返回len(lst) <= 1 (初始值),因为列表中没有第二项。

答案 1 :(得分:-1)

所以不是真的要做作业,但听起来你已经想过这个了。有两种情况需要考虑,并且都需要了解最小的情况:

  1. 第二个最小的是之前看到的最小值,在这种情况下,第二个最小值将是最小值保持最终值之前的值。
  2. 第二个最小的是之后看到的最小值,在这种情况下,第二个最小值会比它大,但是最小值不会小于它等于它
  3. 我在下面的代码中表达了这一点。我们必须保留现有的最小跟踪并添加它。

    def second_smallest():
        smallest = float("inf")
        second_smallest = float("inf")
        for i in second_smallest:
            if smallest > i:
                second_smallest = smallest
                smallest = i
            elif second_smallest > i and not smallest == i:
                second_smallest = i
        return second_smallest
    

    注意,如果您提供相同数字的列表,从技术上讲,可能没有第二个最小值。例如[4,4,4,4]。上面的代码将返回4,但实际上,这是一个应该考虑和处理的错误情况。

    这是一个简单的方法,可以解决像&#34;第n个最小的问题?&#34;此时你基本上已经创建了一个排序算法。