首页 > 解决方案 > 如何找到列表中第二低和第二高的元素?

问题描述

因此,该函数可以正常工作,但列表中 min2(第二个最低值)的输出不正确。我似乎找不到解决方案。 Python 3.8.6

def max2min2(list1):
    max1=list1[0]
    min1=list1[0]
    max2=None
    min2=None
    for item in list1:
        if item>max1:
            max2=max1
            max1=item
        elif max2==None or max2<item:
            max2=item
        if item<min1:
            min2=min1
            min1=item
        elif min2==None or min2>item:
            min2=item
    return max2,min2

list1 = [1,2,3]
max2,min2=max2min2(list1)
print(min2,max2) # 1 2

用简单的输入列表[1,2,3]输出maxmin2(1,2),虽然预期的输出是(2,2)

标签: pythonlist

解决方案


现在,如果不需要对速度进行优化,简单的方法就是取一组数字,对它们进行排序,然后从每一端取第二个元素:

vals = [1,1,3,2,2]
filtered_vals = sorted(set(vals))

接着

# Second lowest
In [37]: filtered_vals[1]
Out[37]: 2

# Second highest
In [36]: filtered_vals[-2]
Out[36]: 2

如果需要,添加一些异常和特殊情况处理。


推荐阅读