我解决这个蟒蛇挑战http://coj.uci.cu/24h/problem.xhtml?abb=2634,这就是我的回答如何提高Python代码的速度
c = int(input())
l = []
for j in range(c) :
i = raw_input().split()[1].split('/')
l.append(int(i[1]))
for e in range(1,13) :
print e , l.count(e)
但它并不是最快的蟒蛇解决方案,所以我试图找到如何提高速度,我发现该xrange比范围更快。但是,当我尝试下面的代码它实际上是慢
c = int(input())
l = []
for j in xrange(c):
i = raw_input().split()[1].split('/')[1]
l.append(i)
for e in xrange(1,13) :
print e , l.count(`e`)
,所以我有2个问题:
- 我怎样才能提高我的脚本
- 的速度,我在哪里可以找到如何信息提高蟒速度
当我一直在寻找这个信息,我发现这样一个https://wiki.python.org/moin/PythonSpeed/PerformanceTips 网站,但它没有指定例如,我F IT是快/慢到使用上面提到的脚本的一部分多次分割的字符串在一行或多行,例如:
i = raw_input().split()[1].split('/')[1]
VS
i = raw_input().split()
i = i[1].split('/')
i = i[1]
编辑:我有尝试了所有的建议,但我的第一个答案仍然是最快的,我不知道为什么。我的冷杉答案是151毫秒和@ Bakuriu的答案是197毫秒,我的答案使用collections.Counter是188毫秒。
编辑2:请忽略我的上次编辑,我只是发现在上述网站中检查您的代码性能的方法不起作用,如果您每次上传相同的代码多次,有些时候,它更慢,有时更快
试图微观优化而不是试图改进整体算法,一般来说,做错了。任何有关“提高Python速度”的公式文档都必然主要由微优化组成,因为大规模算法改进不是Python特有的。如果您非常关心实现细节的重要改进,Python无论如何都是错误的语言。 – 2014-09-04 18:35:50
您可能只是在寻找操作系统时序工件,13个元素上'range'和'xrange'之间的差异很小。你的脚本很慢的原因是你在循环中调用'count'。你应该建立一个合适的计数器(通过使用'collections.Counter')来代替。 – roippi 2014-09-04 18:37:14
@ChalesDuffy谢谢你的回答,我使用python进行这项挑战仅仅是因为我喜欢使用python :) – Xirion11 2014-09-04 18:42:57