是从数组中挑选比简单的if-else语句成本更高



下面是这个问题的答案,它被判断为AC

n=input()
t=int(n[-2:])
d=t%4
if(d==0):
print(n)
elif(d==1):
print("1")
elif(d==2):
print(int(n)+1)
else:
print("0")

我已经提交了这样的代码。

n = input()
t = int(n[-2:])
d = t % 4
print( [n, "1", int(n) + 1, "0"][d])

我想知道的是为什么这会导致超过时间限制。使用索引从数组中提取值的成本是否要高得多一个简单的if.elif…else例程。提前谢谢。

要在@chepner的注释上构建,在约束范围的底部差异可以忽略不计,但在约束范围顶部,构建数组会导致运行时间显著增加。

在输入n=4的第一个代码样本上运行timeit产生

114 µs ± 2.8 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

113 µs ± 3.54 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

用于您的代码示例。不幸的是,当您为非常大的输入构建数组时(请参阅约束n=10^10^5顶部的示例(

第一个代码样本产生

159 ms ± 2.62 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

200 ms ± 4.45 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

用于您的代码示例。