Я знаю, что функция __builtin__
sorted () работает на любой итерации. Но может ли кто-нибудь объяснить эту огромную (в 10 раз) разницу в производительности между anylist.sort () и sorted (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 () и sorted (list). Приведенный выше фрагмент кода показал кое-что интересное: функция сортировки python работает очень хорошо для уже отсортированных данных. Как указывает Anurag, в первом случае метод sort работает с уже отсортированными данными, а во втором - с новым, чтобы снова и снова выполнять работу.
Итак, я написал это для проверки, и да, они очень близки.
"""
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
О, я вижу Алекса Мартелли с ответом, когда я набираю этот ... (я оставлю правку, поскольку это может быть полезно).