list conversion question
Andrew Dalke
adalke at mindspring.com
Sat Sep 4 13:55:49 EDT 2004
Paul McGuire wrote:
> Probably the fastest way to do this (since we are tweaking for
> speed) would be to just change the pairs list comp to "pairs = [(-value,
> offset) for (offset, value) in enumerate(hist)]", or your Py 2.4 key clause
> from "key=lambda pair: pair[1]" to "key=lambda pair: -pair[1]".
Ahh, right. The new Python2.4 'sorted' also has a
"reversed" flag, so
>>> hist = [ 0, 1, 0, 5, 43 ]
>>> [pair[0] for pair in sorted(enumerate(hist),
... key=lambda pair: pair[1],
... reverse=True)]
[4, 3, 1, 0, 2]
>>>
This isn't the same as as reverse() after the sort(),
pairs = [(value, offset) for (offset, value) in enumerate(hist)]
pairs.sort()
indexes = [offset for (value, offset) in pairs]
indexes.reverse()
or
list(reversed([pair[0] for pair in sorted(enumerate(hist),
key=lambda pair: pair[1])]))
Both of these give
[4, 3, 1, 2, 0]
The difference is that sort is now a guaranteed
stable sort. Using 'reverse=True' means the index
to the first 0 (at index 0) appears before the index
to the seond 0 (at index 2). Using reverse() or
reversed() flips that direction.
Andrew
dalke at dalkescientific.com
which would give
[0, 2, 1, 3, 4]
Andrew
More information about the Python-list
mailing list