Python 查找第二个最小值和第二个最大值

Python 查找第二个最小值和第二个最大值,python,Python,这个程序是为了找到第二个最小值和第二个最大值。算法中的错误是什么?它不打印第二个最小值和第二个最大值。它只打印最小值和最大值 a = list(map(int, input().split())) m1 = m2 = s1 = s2 = a[0] for i in range(len(a)): if a[i] > m1: m1 = a[i] if a[i] > m2 and a[i] < m1: m2 = a[i] i

这个程序是为了找到第二个最小值和第二个最大值。算法中的错误是什么?它不打印第二个最小值和第二个最大值。它只打印最小值和最大值

a = list(map(int, input().split()))

m1 = m2 = s1 = s2 = a[0]

for i in range(len(a)):
    if a[i] > m1:
        m1 = a[i]
    if a[i] > m2 and a[i] < m1:
        m2 = a[i]
    if a[i] < s1:
        s1 = a[i]
    if a[i] < s2 and s2 > s1:
        s2 = a[i]
    print(m2, s2)
a=list(映射(int,input().split())
m1=m2=s1=s2=a[0]
对于范围内的i(len(a)):
如果a[i]>m1:
m1=a[i]
如果a[i]>m2和a[i]s1:
s2=a[i]
打印(m2,s2)
使用问答中给出的答案(感谢!),你可以这样做

a=[12,7,5,3,8,5,2,3,42]
#假设a中没有重复项且len(a)>1:
如果a[0]>a[1]:#确保m1!=m2和s1!=s2
m1,m2=a[0],a[1]
s1,s2=a[0],a[1]
其他:
m1,m2=a[1],a[0]
s1,s2=a[1],a[0]
对于我来说,在一个:
#最大值和第二最大值
如果i>m1:
m1,m2=i,m1
如果i>m2:
m2=i
#最小值和第二最小值
如果i
与所讨论的代码相比

  • 正确初始化,使逻辑正常工作。如果
    a[0]
    不是最大值,则将所有设置都设置为
    a[0]
    可以工作,例如,如果
    a[0]
    不是最小值,则设置为最大值,或者设置为最小值。不是两者都有
  • 修改逻辑,使值同时更新,而不是按顺序更新。否则,条件就不会像我所评论的那样起作用
注意:我假设这个练习的全部要点都是使用条件句。否则,您可以简化为

a=list(set([1,7,5,3,8,5,2,3,1])#使用set删除重复项
m1,s1=最大值(a),最小值(a)
_,u=a.移除(m1),a.移除(s1)
m2,s2=最大值(a),最小值(a)
打印(m1、m2、s1、s2)
# 8 7 1 2
甚至:


…而且我敢打赌还有更多的可能性。

它是用python编写的。它打印最大值和最小值,但不通过逻辑打印第二个最大值和第二个最小值:如果您设置
m1=a[i]
,您应该如何编辑代码并将其发送到我正在执行的操作mistake@Sandeep你试过使用调试器吗?@Sandeep如果你的程序没有生成预期的输出,那么它就有一个bug。您需要学习使用调试器(或简单的
print
语句)跟踪执行,以确定程序偏离预期行为的地方。
a_srt = sorted(list(set(a)))
m1, m2, s1, s2 = a_srt[-1], a_srt[-2], a_srt[0], a_srt[1]