[Tutor] 4.7.5

Alan Gauld alan.gauld at btinternet.com
Mon Jan 20 11:48:16 CET 2014


On 20/01/14 01:16, Doug and Riekie Dorman wrote:
> I think I may have found a bug:
>
>>>>pairs  =  [(1,  'one'),  (2,  'two'),  (3,  'three'),  (4,  'four')]
>>>>pairs.sort(key=lambda  pair:  pair[1])
>>>>pairs
> [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
>
> Should be:
>
>>>>pairs  =  [(1,  'one'),  (2,  'two'),  (3,  'three'),  (4,  'four')]
>>>>pairs.sort(key=lambda  pairs:  pairs[1])
>>>>pairs
> [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
>
> I have increased the size of the two s's to show the problem.

In plain text that doesn't help. However you seem to be confused about 
what the lambda is doing.

pairs.sort(key = lambda p : p[1])

is the same as

def somefunc(p):
     return p[1]

pairs.sort(key=somefunc)

The parameter to the lambda function is completely separate to the list. 
It's part of the function definition. It takes on whatever
value is passed, in your case it is passed the individual tuples
within the list. The name you use is irrelevant.


-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos



More information about the Tutor mailing list