Академический вопрос. Эта функция вычисляет Benford's Law для целых чисел до maxvalue и печатает сводную таблицу. Я пробовал вложенный метод for-loop, метод 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)+' %']))
Каковы были времена для других методов? – mtrw
В Python 2.7, 'xrange' может быть немного быстрее, чем' range', и определенно будет более эффективным с точки зрения памяти. – Gabe
Что там делает '** 2'? Вероятно, это займет большую часть времени и заставит вас измерить полномочия от 2 до 2^1 000 000, а не целых до 1 000 000. – Gabe