为什么 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
在下面的代码中,用户每次输入 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