On Mon, Mar 28, 2011 at 03:43:03PM +0000, Steven D'Aprano wrote: > On Mon, 28 Mar 2011 14:39:04 +0200, Antoon Pardon wrote: > > > I tried to sort lists of 10000 elemens. Each element a tuple two items > > that was to be sorted first according to the first item in ascending > > order, then according to the second item in descending order. This was > > done on python 2.6 so I had to write my own cmp_to_key function. > > > > I then sorted these lists of 10000 elements a 1000 times with the > > following methods. > > Thank you for spending the time to get some hard data, but I can't > replicate your results since you haven't shown your code. Rather than > attempt to guess what you did and duplicate it, I instead came up with my > own timing measurements. Results are shown here, my code follows below:
But why expect me to come up with such data? Shouldn't the dev team have come up with such data before they decided to remove the cmp-argument, instead of afterwards expecting the python users to come up with data to support the reversing of that decision? > [steve@sylar ~]$ python2.7 sort_test.py > Comparison function: 12.1256039143 > Key function: 3.51603388786 > Double sort: 2.33165812492 > cmp_to_key: 28.1129128933 > > > By far the best result comes from two calls to sort. Not far off is the > key function solution. (Admittedly, coming up with a key function for non- > numeric data would be challenging.) The comparison function, and the > cmp_to_key solution, are clearly *much* slower. So, that means that the fastest solutions don't generalize. The double sort is useless if the actual sorting is done in a different module/function/method than the module/function/method where the order is implemented. It is even possible you didn't write the module where the sorting actually occurs. Your key-function only works with numeric data, strings already pose a problem here. The cmp function can be externally provided, without you having the source. So sooner or later there will be a user who just doesn't have a choice but to use cmp_to_key or something similar. and who will have to suffer this kind of speed loss. -- Antoon Pardon -- http://mail.python.org/mailman/listinfo/python-list