gpt4 book ai didi

python - 改进用于测试机器的 python 代码的 IO

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:44 25 4
gpt4 key购买 nike

我在做一些练习题 Codechef .这个问题叫做 Ambiguous permutations :

我的解决方案是:

while 1:
cnt = int(raw_input())
if cnt == 0:
break
vals = [int(u) for u in raw_input().split(' ')]
valr = []
for i in range(cnt):
valr.append(vals.index(i+1)+1)
if vals == valr:
print 'ambiguous'
else:
print 'not ambiguous'

当我在 Trypython.org 中 checkout 时,它按预期工作。但是当我在Codechef中提交解决方案时,它超时了。

我的问题是这样的。代码是否有任何错误(/可以改进),或者是否有任何特定的方法来处理测试机器的 sysin 和输出?

[编辑]接受的解决方案提供了一些很好的建议,我重新考虑了代码逻辑并相应地修改了代码。代码现在在时间内运行,尽管它因错误的答案而失败(尽管无法在我的测试用例中复制错误的答案)。感谢您的建议。

import sys
def ambigcheck(lis):
amb = 'ambiguous'
for i in range(1,len(lis)+1):
if lis[lis[i-1]-1] != i:
amb = 'not ambiguous'
break
return amb
while 1:
cnt = int(sys.stdin.readline())
if cnt == 0:
break
vals = [int(u) for u in sys.stdin.readline().split(' ')]
sys.stdout.write(ambigcheck(vals))

最佳答案

不要使用raw_input。使用 sys.stdin: 作为迭代器,或 read() 一次。并使用 sys.stdout.write 而不是 print。尝试只使用一次:预先计算整个输出并在之后将其写入屏幕。

这将为您提供 Python 中最快的 I/O。

更多提示:

  • 你不需要构造一个新的排列,你可以只检查原始排列中的元素是否有合适的索引
  • 你不需要做全面检查,如果至少有一个元素没有正确的索引,排列就没有歧义
  • 避免.index()方法,按索引检查,不按值
  • 您可以通过使用 itertools.islice 只读取奇数行来更有效地处理输入(您不需要 Python 中的项目数)

关于python - 改进用于测试机器的 python 代码的 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10828689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com