Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > best Pythonic way to do this sort: Python newb

Reply
Thread Tools

best Pythonic way to do this sort: Python newb

 
 
Sean Berry
Guest
Posts: n/a
 
      10-10-2005
Hello all

I have build a list that contains data in the form below
-- simplified for question --
myList = [[value1, value2, value3],[value1, value2, value3], ...]

I have a function which takes value3 from the lists above and returns
another value. I want to use this returned value to sort the lists.

So, my resultant list would be ordered by the return value of the
function with value3 as its argument.

From a relative Python newb, what is the best way to do this?

Thanks for any help offered.


 
Reply With Quote
 
 
 
 
Paul Rubin
Guest
Posts: n/a
 
      10-10-2005
"Sean Berry" <(E-Mail Removed)> writes:
> myList = [[value1, value2, value3],[value1, value2, value3], ...]
>
> I have a function which takes value3 from the lists above and returns
> another value. I want to use this returned value to sort the lists.
>
> So, my resultant list would be ordered by the return value of the
> function with value3 as its argument.
>
> From a relative Python newb, what is the best way to do this?


def get_key(x): return x[2]
sorted_list = sorted(myList, key=get_key)
 
Reply With Quote
 
 
 
 
Sean Berry
Guest
Posts: n/a
 
      10-10-2005

"Paul Rubin" <http://(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> "Sean Berry" <(E-Mail Removed)> writes:
>> myList = [[value1, value2, value3],[value1, value2, value3], ...]
>>
>> I have a function which takes value3 from the lists above and returns
>> another value. I want to use this returned value to sort the lists.
>>
>> So, my resultant list would be ordered by the return value of the
>> function with value3 as its argument.
>>
>> From a relative Python newb, what is the best way to do this?

>
> def get_key(x): return x[2]
> sorted_list = sorted(myList, key=get_key)


Sorry if I am missing something. But. what is sorted here?

My simplified function looks like this

def myFunction( myNumber ):
"do some math calculations to myNumber"
return "result of calculations"

So, I want to sort myList by the return of myFunction( value3 )

I tried doing the following... with no luck so far
myList.sort(lambda x, y: cmp(myFunction(x[2]), myFunction(y[2]))

Thanks for any help.


 
Reply With Quote
 
Paul Rubin
Guest
Posts: n/a
 
      10-10-2005
"Sean Berry" <(E-Mail Removed)> writes:
> > def get_key(x): return x[2]
> > sorted_list = sorted(myList, key=get_key)

>
> Sorry if I am missing something. But. what is sorted here?


sorted is a built-in function that sorts the thing that you pass it.
It just appeared in Python 2.4, I think. With older versions, yeah,
you have to use the .sort method that sorts in place.

> I tried doing the following... with no luck so far
> myList.sort(lambda x, y: cmp(myFunction(x[2]), myFunction(y[2]))


That looks ok to me.

>>> x = [(i,i*i,1 + 17*i**2 - i**3) for i in range(20)]
>>> x

[(0, 0, 1), (1, 1, 17), (2, 4, 61), (3, 9, 127), (4, 16, 209), (5, 25,
301), (6, 36, 397), (7, 49, 491), (8, 64, 577), (9, 81, 649), (10,
100, 701), (11, 121, 727), (12, 144, 721), (13, 169, 677), (14, 196,
589), (15, 225, 451), (16, 256, 257), (17, 289, 1), (18, 324, -323),
(19, 361, -721)]
>>> x.sort(lambda a,b:cmp(a[2],b[2]))
>>> x

[(19, 361, -721), (18, 324, -323), (0, 0, 1), (17, 289, 1), (1, 1,
17), (2, 4, 61), (3, 9, 127), (4, 16, 209), (16, 256, 257), (5, 25,
301), (6, 36, 397), (15, 225, 451), (7, 49, 491), (8, 64, 577), (14,
196, 589), (9, 81, 649), (13, 169, 677), (10, 100, 701), (12, 144,
721), (11, 121, 727)]
>>>

 
Reply With Quote
 
Brett Hoerner
Guest
Posts: n/a
 
      10-10-2005
(sorted is a built-in function in 2.4)

def myFunction( data ):
""" Take one of your set of 3, grab [2] (the 3rd) and do calcs,
return value """
"do some math calculations to data[2]"
return "result of calculations"

sorted_list = sorted(myList, key=myFunction)

List is sorted in the order of the 'key' values, key being a value
returned from myFunction which operates on [2].

 
Reply With Quote
 
Satchidanand Haridas
Guest
Posts: n/a
 
      10-10-2005

----
Satchidanand Haridas (sharidas at zeomega dot com)

ZeOmega (www.zeomega.com)
Open Minds' Open Solutions



Sean Berry wrote:

>"Paul Rubin" <http://(E-Mail Removed)> wrote in message
>news:(E-Mail Removed)...
>
>
>>"Sean Berry" <(E-Mail Removed)> writes:
>>
>>
>>>myList = [[value1, value2, value3],[value1, value2, value3], ...]
>>>
>>>I have a function which takes value3 from the lists above and returns
>>>another value. I want to use this returned value to sort the lists.
>>>
>>>So, my resultant list would be ordered by the return value of the
>>>function with value3 as its argument.
>>>
>>>From a relative Python newb, what is the best way to do this?
>>>
>>>

>>def get_key(x): return x[2]
>>sorted_list = sorted(myList, key=get_key)
>>
>>

>
>Sorry if I am missing something. But. what is sorted here?
>
>My simplified function looks like this
>
>def myFunction( myNumber ):
> "do some math calculations to myNumber"
> return "result of calculations"
>
>So, I want to sort myList by the return of myFunction( value3 )
>
>I tried doing the following... with no luck so far
>myList.sort(lambda x, y: cmp(myFunction(x[2]), myFunction(y[2]))
>
>
>

I think the above statement should be as follows:

myList.sort(lambda x, y: cmp(myFunction(x[2]) - myFunction(y[2]))



hope that helps.

regards,
Satchit
 
Reply With Quote
 
George Sakkis
Guest
Posts: n/a
 
      10-10-2005
"Satchidanand Haridas" <(E-Mail Removed)> wrote:

> >So, I want to sort myList by the return of myFunction( value3 )
> >
> >I tried doing the following... with no luck so far
> >myList.sort(lambda x, y: cmp(myFunction(x[2]), myFunction(y[2]))
> >
> >
> >

> I think the above statement should be as follows:
>
> myList.sort(lambda x, y: cmp(myFunction(x[2]) - myFunction(y[2]))
>
>
>
> hope that helps.


It would help more if you tested it before you posted. cmp takes two arguments (let alone that
subtraction may not be defined for the list elements), so the original version is correct.

George


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Object Oriented vs Pythonic Code, and Pythonic standards Carl J. Van Arsdall Python 4 02-07-2006 10:15 PM
The pythonic way Somesh Python 0 12-01-2005 05:01 AM
Controlling a generator the pythonic way Thomas Lotze Python 12 06-14-2005 12:56 AM
Pythonic way to do static local variables? Charles Krug Python 11 04-27-2005 06:01 AM
What's the Pythonic way to do this? Doug Rosser Python 4 09-12-2004 03:24 PM



Advertisments