Schwartzian transform for tuple in list

Chris Rebert clp at rebertia.com
Wed Sep 24 23:19:03 CEST 2008


On Wed, Sep 24, 2008 at 2:02 PM, David Di Biase <dave.dibiase at gmail.com> 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

>
> 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
>
-- 
Follow the path of the Iguana...
http://rebertia.com



More information about the Python-list mailing list