Я получил очень неожиданные результаты с тайм-аутом, может ли кто-нибудь сказать мне, что я делаю что-то неправильно? Я использую Python 2.7.
Это содержимое файла speedtest_init.py:
import random
to_count = [random.randint(0, 100) for r in range(60)]
Это содержимое speedtest.py:
__author__ = 'BlueTrin'
import timeit
def test_init1():
    print(timeit.timeit('import speedtest_init'))
def test_counter1():
    s = """\
    d = defaultdict(int);
    for i in speedtest_init.to_count:
        d[i] += 1
    """
    print(timeit.timeit(s, 'from collections import defaultdict; import speedtest_init;'))
def test_counter2():
    print(timeit.timeit('d = Counter(speedtest_init.to_count);', 'from collections import Counter; import speedtest_init;'))
if __name__ == "__main__":
    test_init1()
    test_counter1()
    test_counter2()
Выход консоли:
C:\Python27\python.exe C:/Dev/codility/chlorum2014/speedtest.py
2.71501962931
65.7090444503
91.2953839048
Process finished with exit code 0
Я думаю, что по умолчанию timeit() выполняет 1000000 раз код, поэтому мне нужно разделить время на 1000000, но удивительно, что счетчик медленнее, чем defaultdict().
Ожидается ли это?
EDIT:
Также использование dict быстрее, чем defaultdict (int):
def test_counter3():
    s = """\
    d = {};
    for i in speedtest_init.to_count:
        if i not in d:
            d[i] = 1
        else:
            d[i] += 1
    """
    print(timeit.timeit(stmt=s, setup='from collections import defaultdict; import speedtest_init;')
эта последняя версия быстрее, чем defaultdict (int), означающая, что, если вам больше не нужна читаемость, вы должны использовать dict(), а не defaultdict().