When you say slightly, is it enough to make a difference? Why would getitems be faster even - not sure I can think why...

Sent from my iPhone

On 24-Sep-08, at 5:46 PM, Matt Nordhoff <[EMAIL PROTECTED]> wrote:

Chris Rebert wrote:
On Wed, Sep 24, 2008 at 2:02 PM, David Di Biase <[EMAIL PROTECTED] > wrote:
Hi,

I have a rather large list structure with tuples contained in them (it's
part of a specification I received) looks like so:
[(x1,y1,r1,d1),(x2,y2,r2,d2)...]

The list can range from about 800-1500 tuples in size and I'm currently
sorting it with this:

a_list.sort(lambda a, b: cmp(b[3], a[3]))

You'd probably be better off using the 'key' keyword argument to
.sort(), which is made for the Schwartzian Transform:

a_list.sort(key=lambda x: x[3])

This sorts the list items by the value produced by the key function
for each item. It's also (IIRC) faster than using a comparison
function like you're currently doing.

Regards,
Chris

Yes, using 'key' is faster than 'cmp'.

If you have Python 2.4 or newer, it would also be slightly faster to use
operator.itemgetter() instead of a lambda:

import operator
a_list.sort(key=operator.itemgetter(3))

I'm actually sorting it by the last value in the tuple (d2). I have been researching more efficient sorting algorithms and came across Schwartzian
transform via these links:

http://www.biais.org/blog/index.php/2007/01/28/23-python-sorting-efficiency
http://dev.fyicenter.com/Interview-Questions/Python/Can_you_do_a_Schwartzian_Transform_in_Python_.html

I get what's happening (sorta...errr...lol) but I'm not sure if it is more efficient in my scenario, if it is then I have no idea how to implement it
properly :-/

Would be great if a true expert would offer a suggestion for me...

Thanks!

David
--
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to