[英]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.