首页 > 解决方案 > 使用 Python,有没有更优雅的方法来查找列表中的第二大数字?

问题描述

我在求职面试中提出了这个问题,我想知道是否有不同的方法来解决这个问题。最好使用 Python 3。

给定 [20,40,20,60,80] 的列表,找到第二高的数字。

这个想法是删除重复项。在一个解决方案中,我遍历了列表,并将任何唯一值添加到唯一值列表中。我这样做的另一种方法是将列表转换为集合并返回列表,然后获取第二个数字。

所以这就是问题所在。有没有更好的方法使用 Python 3 来做到这一点?

这是我以两种不同方式解决的代码。

def second_item_method_1():

    my_list = [20,40,20,60,80]
    my_set  = set(my_list)
    my_list = list(my_set)
    my_list.sort()

    print(my_list[1])

def second_item_method_2():
    my_list = [20,40,20,60,80]
    unique_list = []

    for x in my_list:
        if x not in unique_list:
            unique_list.append(x)

    print(my_list[1])

second_item_method_1()
second_item_method_2()

还有其他可能的解决方案吗?

标签: pythonpython-3.xlistsorting

解决方案


def third_item_method():
    list1 = [20, 40, 20, 60, 80]
    mx=max(list1[0],list1[1])
    secondmax=min(list1[0],list1[1]) 
    n =len(list1)
    for i in range(2,n):
       if list1[i]>mx:  
           secondmax=mx 
           mx=list1[i]  
       elif list1[i]>secondmax and mx != list1[i]:  
           secondmax=list1[i] 
       else: 
       if secondmax == mx: 
           secondmax = list1[i] 

     print("Second highest number is : ",str(secondmax)) 
third_item_method()

资源:https://www.geeksforgeeks.org/python-program-to-find-second-largest-number-in-a-list/


推荐阅读