Я знаю, что функция __builtin__
sorted() работает на любом итерабельном. Но может ли кто-нибудь объяснить эту огромную (10x) разницу в производительности между anylist.sort() и отсортированным (anylist)? Также, пожалуйста, укажите, что я делаю что-то неправильно, так как это измеряется.
""" Example Output: $ python list_sort_timeit.py Using sort method: 20.0662879944 Using sorted builin method: 259.009809017 """ import random import timeit print 'Using sort method:', x = min(timeit.Timer("test_list1.sort()","import random;test_list1=random.sample(xrange(1000),1000)").repeat()) print x print 'Using sorted builin method:', x = min(timeit.Timer("sorted(test_list2)","import random;test_list2=random.sample(xrange(1000),1000)").repeat()) print x
Как говорится в названии, мне было интересно сравнить list.sort() vs sorted (list). Вышеприведенный фрагмент показал что-то интересное, что функция сортировки python ведет себя очень хорошо для уже отсортированных данных. Как уже указывал Anurag, в первом случае метод сортировки работает с уже отсортированными данными, а во второй сортировке он работает над новой частью, чтобы делать работу снова и снова.
Итак, я написал этот тест, и да, они очень близки.
""" Example Output: $ python list_sort_timeit.py Using sort method: 19.0166599751 Using sorted builin method: 23.203567028 """ import random import timeit print 'Using sort method:', x = min(timeit.Timer("test_list1.sort()","import random;test_list1=random.sample(xrange(1000),1000);test_list1.sort()").repeat()) print x print 'Using sorted builin method:', x = min(timeit.Timer("sorted(test_list2)","import random;test_list2=random.sample(xrange(1000),1000);test_list2.sort()").repeat()) print x
О, я вижу Алекс Мартелли с ответом, когда я печатаю его. (Я оставлю редактирование, поскольку это может быть полезно).