学術的な質問です。この関数は、最大値までの整数に対してベンフォードの法則を計算し、要約テーブルを出力します。ネストされた for ループ メソッド、dict メソッド、およびこのコレクション メソッドを試しました。後者 (以下のコード) が最速 (timeit 結果: 1.4852424694 秒) のように見えますが、非常に多くの可能性を循環させるためのより高速でメモリ効率の良い方法はありますか?
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)+' %']))