一個學術問題。此函數計算最大值爲0的整數Benford's Law,並打印彙總表。我試過了一個嵌套的for-loop方法,一個字典方法和這個集合方法。後者(代碼如下)似乎是最快的(時間結果:1.4852424694秒),但是有沒有一種更快速和高效的內存循環方法來實現如此多的可能性?更高效的Benford法則代碼?
from __future__ import print_function
def BenfordsLaw4(maxvalue = 10**6):
from collections import Counter
sqList = (str((i+1)**2)[0] for i in range(maxvalue))
BenfordList = Counter(sqList)
print("Benford's Law for numbers between 1 and", maxvalue, "\nDigits,\t\t\t", "Count,\t\t\t", "Percentage")
for i,j in sorted(BenfordList.iteritems()):
print(',\t\t\t\t'.join([str(i), str(j), str(j*100./maxvalue)+' %']))
其他方法的時間是什麼? – mtrw
在Python 2.7中,'xrange'可能比'range'快一點,肯定會提高內存效率。 – Gabe
在那裏做什麼** 2?這可能要花費大部分時間,並導致您測量2的權力高達2^1,000,000非整數高達1,000,000。 – Gabe