我解決這個蟒蛇挑戰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