繁体   English   中英

为什么 max 函数没有在我的代码中打印正确的输出?

[英]why max function does not print proper output in my code?

在以下代码中,用户每次输入N对输入。 当用户输入值2 ,最近的元组将被删除,值3打印剩余元组的第二个元素的最大值。 假设输入列表是B=[(1,4),(1,37),2,3,(1,29),3] 因此, 2将删除(1,37) 然后(1,4)保留在列表中,然后 3 打印(1,4)4 通过输入(1,29)剩余的列表将是([1,4],[1,29])并且代码应该打印元组中第二个元素的最大值,即29但它打印4而不是 29。

所以预期输出是:

4
29

但我的代码输出是:

4
4
N = int(input())
inputs = []
for i in range(N):
    inputs.append(input().split())
B = []
for b in inputs:
    if len(b) == 2:
        B.append(b)
    if b == ['2']:
        del B[-1]  
    if b == ['3']:
        print(max(B,key=lambda x:x[1])[1])

简单修正:

'4' > '29' 但 4 < 29

所以:

print(max(B,key=lambda x:x[1])[1])应该是print(max(B,key=lambda x:int(x[1]))[1])

或者,更好的是在输入时将字符串转换为整数,然后您的 lambda 函数将是正确的。

最有效的方法(我能想到的)

此代码应提供卓越的性能。 彻底测试一下:

N = int(input())
inputs = [[int(x) for x in input().split()] for _ in range(N)]

max_values = []
B = []
for t in inputs:
    if len(t) == 2:
        B.append(t)
        v = t[1]
        if not max_values or v >= max_values[-1]: # if it's smaller, it can never be a maximum value
            max_values.append(v)
    elif t == [2]:
        item = B.pop() # remove last element
        v = item[1]
        if v == max_values[-1]:
            max_values.pop()
    else:
        assert t == [3]
        print(max_values[-1])

检查元素是否是元组并检查没有引号或列表的整数

#N = int(input())
#inputs = []
inputs = [(1,4),(1,37),2,3,(1,29),3]
#for i in range(N):
#    inputs.append(input().split())

B = []
for b in inputs:
    if type(b) == tuple:
        B.append(b)
    if b == 2:
        del B[-1]  
    if b == 3:
        print(max(B,key=lambda x:x[1])[1])

输出

4
29

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM