An ordering question

Hrvoje Niksic hniksic at xemacs.org
Fri Mar 13 15:33:51 EDT 2009


"andrew cooke" <andrew at acooke.org> writes:

> Hrvoje Niksic wrote:
>> Kottiyath <n.kottiyath at gmail.com> writes:
>>
>>> Hi,
>>>     I have 2 lists
>>> a = [(4, 1), (7, 3), (3, 2), (2, 4)]
>>> b = [2, 4, 1, 3]
>>>
>>>     Now, I want to order _a_ (a[1]) based on _b_.
>>>     i.e. the second element in tuple should be the same as b.
>>>     i.e. Output would be [(3, 2), (2, 4), (4, 1), (7, 3)]
>> [...]
>>>      whether I can do it in a line or 2,
>>
>> a.sort(key=lambda (x, y): b[y - 1], reverse=True)
>
> that's hilarious!  i have no idea how it works
[...]
> did you just play around until you got the right answer?  how many
> different tries did you need?

Glad to have made someone laugh, but it in fact wasn't meant to.  :-)
It was a combination of misunderstanding the question *and* trying out
the answer.

I understood that the second element of each tuple should be sorted
according to the corresponding element in b.  This part is partly
correct, but I took corresponding to mean that it should be sorted by
the value of b[x], x being the second element of each tuple.  Since
those elements appear to be 1-based, I added -1.  This produced a list
in exactly the reverse order, so I added reverse=True.

Your solution are probably the "two lines" the OP was looking for.



More information about the Python-list mailing list