[Tutor] Sorting list of tuples in two passes
Steven D'Aprano
steve at pearwood.info
Mon Aug 29 02:34:39 CEST 2011
Dayo Adewunmi wrote:
> It works when I use your example, but I don't understand why it won't
> work when I use 4-element tuples instead of 2:
What makes you say it doesn't work? It looks like it works to me:
> >>>l = [('wascas','aaa','fdvdfv', 1), ('rtgdsf','bbb','trfg', 1),
> ('addwe','ccc','esd', 1), ('xasd','aaa','wascaq', 2),
> ('nhy','bbb','asw', 2), ('zzzz','ccc','dgdeg', 2)]
> >>> l
> [('wascas', 'aaa', 'fdvdfv', 1), ('rtgdsf', 'bbb', 'trfg', 1), ('addwe',
> 'ccc', 'esd', 1), ('xasd', 'aaa', 'wascaq', 2), ('nhy', 'bbb', 'asw',
> 2), ('zzzz', 'ccc', 'dgdeg', 2)]
> >>> l.sort(key=itemgetter(3))
> >>> l
> [('wascas', 'aaa', 'fdvdfv', 1), ('rtgdsf', 'bbb', 'trfg', 1), ('addwe',
> 'ccc', 'esd', 1), ('xasd', 'aaa', 'wascaq', 2), ('nhy', 'bbb', 'asw',
> 2), ('zzzz', 'ccc', 'dgdeg', 2)]
List "l" is now sorted by the element in position 3 (counting from zero,
not one): 1 1 1 2 2 2
> >>> l.sort(key=itemgetter(1))
> >>> l
> [('wascas', 'aaa', 'fdvdfv', 1), ('xasd', 'aaa', 'wasca q', 2),
> ('rtgdsf', 'bbb', 'trfg', 1), ('nhy', 'bbb', '
> asw', 2), ('addwe', 'ccc', 'esd', 1), ('zzzz', 'ccc', 'dgdeg', 2)]
And now elements are sorted in order of position 1:
aaa aaa bbb bbb ccc ccc
In the event of ties (and there are three pairs of ties) the elements
keep the relative order they were in after the first sort.
The sorting worked just as expected.
--
Steven
More information about the Tutor
mailing list