我一直在codechef.com上遇到this练习问题。我终于能够找到一个有效的解决方案。
import sys
def p():
numbers, div = map(int,sys.stdin.readline().split())
ans = 0
for i in xrange(numbers):
if int(sys.stdin.readline()) % div == 0:
ans += 1
i += 1
print ans
p()
但是这显示在43.60中,如here所示。它比最好的解决方案更糟糕。他们都使用psyco模块,它不适用于Python 2.7。
Python 2.7中是否有一些更快的IO方法可以提高这种实践问题的时间效率,以及需要大量输入的一般编程问题?还请考虑可以增加内存使用以获得所需时间效率的情况。
编辑:
此问题不需要更快的浮点数IO,但可能还需要其他一些问题,所以也可以为它们提出建议。
EDIT2:
nums = int(sys.stdin.readline())
float_nums = map(float,next(sys.stdin).split())
for p in islice(sys.stdin, float_nums, None):
我使用上面的内容与@Martijn Pieters的浮点数答案一起使用。我没有使用xrange()
答案 0 :(得分:4)
使用该文件作为迭代器(不同的,可能更优化的缓冲策略),并利用生成器表达式:
import sys
from itertools import islice
def p():
numbers, div = map(int, next(sys.stdin).split())
print sum(int(l) % div == 0 for l in islice(sys.stdin, numbers))
p()
这将布尔值视为整数(它们是子类; True
在整数上下文中为1,False
为0)。
或尝试:
import sys
from itertools import islice
def p():
numbers, div = map(int, next(sys.stdin).split())
print sum(1 for l in islice(sys.stdin, numbers) if int(l) % div == 0)
p()
这些工作做了不同的工作,并且根据存在的可分割数量,一个可能比另一个(if
测试与总和0和1)相比更快。
答案 1 :(得分:1)
使用pypy,pysco的继任者。