我编码this problem at CodeChef并将其作为Python3解决方案提交:
import sys
n,k = map(int,sys.stdin.readline().split(" "))
nos = map(int,sys.stdin.readlines())
ans = 0
for i in nos:
if i>0 and i%k == 0:
ans += 1
print(ans)
但是,如果我把代码编写为:
,它会超出时间限制,令我感到恐惧import sys
n,k = map(int,sys.stdin.readline().split(" "))
nos = map(int,sys.stdin.readlines())
ans = 0
for i in nos:
if i>0 and i%k == 0:
ans += 1
print ans
并将其作为Python2解决方案提交,然后解决方案被接受。
我根本不明白这是怎么回事?...
==== ###更新### ====
Sebastian 的解决方案适用于Python3,但与我的python2.7解决方案相比, 10秒慢。我仍然没有得到答案,为什么与以前的语言相比,最新版本的语言会导致性能下降?...答案 0 :(得分:2)
我可以确认完全相同的解决方案通过python 2.7上的测试,但它在python 3.1上超时:
import sys
try:
from future_builtins import map # enable lazy map on Python 2.7
except ImportError:
pass
file = sys.stdin
n, k = map(int, next(file).split())
print(sum(1 for i in map(int, file) if i % k == 0))
file
是一个遍历行的迭代器。由于map
是惰性的,代码支持大文件(不会立即使用整个文件)。
以下代码在python 3.1上传递测试:
import sys
n, k, *numbers = map(int, sys.stdin.buffer.read().split())
print(sum(1 for i in numbers if i % k == 0))
注意:它不支持任意大输入(以及问题中的代码)。
答案 1 :(得分:0)
在python3中,map
,zip
之类的东西会返回生成器而不是列表。我认为生成器带来了使代码TLE的开销。要制作一个真实的列表,请使用list comprehension [int(line) for line in std.sys]
答案 2 :(得分:0)
错误发生在n,k = map(int,sys.stdin.readline().split(" "))
行。我试图将n
和k
分开,但是一旦调用map
命令,它似乎仍然会卡住。这是一个解释map
函数的页面:http://docs.python.org/2/library/functions.html#map我或IDLE都找不到的语法似乎很奇怪。希望这有帮助