Python - Find second smallest number

前端 未结 16 1157
长发绾君心
长发绾君心 2020-11-28 10:35

I found this code on this site to find the second largest number:

def second_largest(numbers):
    m1, m2 = None, None
    for x in numbers:
        if x >         


        
相关标签:
16条回答
  • 2020-11-28 11:11

    Solution that returns second unique number in list with no sort:

    def sec_smallest(numbers):
        smallest = float('+inf')
        small = float('+inf')
        for i in numbers:
            if i < smallest:
                small = smallest
                smallest = i
            elif i < small and i != smallest:
                small = i
        return small
    
    print('Sec_smallest:', sec_smallest([1, 2, -8, -8, -2, 0]))
    
    0 讨论(0)
  • 2020-11-28 11:15

    To find second smallest in the list, use can use following approach which will work if two or more elements are repeated.

    def second_smallest(numbers):
         s = sorted(set(numbers))
         return s[1]
    
    0 讨论(0)
  • 2020-11-28 11:15

    My favourite way of finding the second smallest number is by eliminating the smallest number from the list and then printing the minimum from the list would return me the second smallest element of the list. The code for the task is as below:

    mylist=[1,2,3,4]
    mylist=[x for x in mylist if x!=min(mylist)]  #deletes the min element from the list
    print(min(mylist))
    
    0 讨论(0)
  • 2020-11-28 11:16

    Here we want to keep an invariant while we scan the list of numbers, for every sublist it must be

    m1<=m2<={all other elements}

    the minimum length of a list for which the question (2nd smallest) is sensible is 2, so we establish the invariant examining the first and the second element of the list (no need for magic numbers), next we iterate on all the remaining numbers, maintaining our invariant.

    def second_smaller(numbers):
        # if len(numbers)<2: return None or otherwise raise an exception
    
        m1, m2 = numbers[:2]
        if m2<m1: m1, m2 = m2, m1
    
        for x in numbers[2:]:
            if x <= m1:
                m1, m2 = x, m1
            elif x < m2:
                m2 = x
        return m2
    

    Addendum

    BTW, the same reasoning should be applied to the second_largest function mentioned by the OP

    0 讨论(0)
  • 2020-11-28 11:17
    def SecondSmallest(x):
        lowest=min(x[0],x[1])
        lowest2 = max(x[0],x[1])
        for item in x:
             if item < lowest:
                lowest2 = lowest
                lowest = item
             elif lowest2 > item and item > lowest:
                lowest2 = item
        return lowest2
    
    SecondSmallest([10,1,-1,2,3,4,5])
    
    0 讨论(0)
  • 2020-11-28 11:19

    Here is:

    def find_second_smallest(a: list) -> int:
        first, second = float('inf')
        for i in range(len(a)):
            if a[i] < first:
                first, second = a[i], first
            elif a[i] < second and a[i] != first:
                second = a[i]
        return second
    

    input: [1, 1, 1, 2]
    output: 2

    0 讨论(0)
提交回复
热议问题