To sort List, Python provides two methods
Method 1. Use List’s built-in function list.sort to sort
list.sort(func=None, key=None, reverse=False)
Python example :
>>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> list.sort() >>> list [2, 3, 5, 8, 9]
Method 2. Use sequence type function sorted(list) to sort (starting from 2.4)
Python example:
>>> list = [2,5,8,9,3] >>> list [2,5,8,9,3] >>> sorted(list) [2, 3, 5, 8, 9]
The difference between the two methods:
sorted(list) Returns an object that can be used as an expression. The original list remains unchanged and a new sorted list object is generated.
list.sort() will not return objects and change the original list.
Other examples of sort:
Example 1: Forward sorting
>>>L = [2,3,1,4] >>>L.sort() >>>L >>>[1,2,3,4]
Example 2: Reverse sort
>>>L = [2,3,1,4] >>>L.sort(reverse=True) >>>L >>>[4,3,2,1]
Example 3: Sorting the second keyword
>>>L = [('b',6),('a',1),('c',3),('d',4)] >>>L.sort(lambda x,y:cmp(x[1],y[1])) >>>L >>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
Example 4: Sort the second keyword
>>>L = [('b',6),('a',1),('c',3),('d',4)] >>>L.sort(key=lambda x:x[1]) >>>L >>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
Example 5: Sort the second keyword
>>>L = [('b',2),('a',1),('c',3),('d',4)] >>>import operator >>>L.sort(key=operator.itemgetter(1)) >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
Example 6: (DSU method: Decorate-Sort-Undercorate)
>>>L = [('b',2),('a',1),('c',3),('d',4)] >>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort >>>A.sort() >>>L = [s[2] for s in A] >>>L >>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
The above gives 6 methods for sorting List, among which Example 3.4.5.6 can be used to sort a certain item
in the List item as the comparison key.
Efficiency comparison:
cmp < DSU < key< DSU < key
Through experimental comparison, method 3 is slower than method 6, method 6 is slower than method 4, method 4 and method 5 are basically equivalent
Multiple keyword comparison sorting:
Example 7:
>>>L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=lambda x:x[1]) >>> L >>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]
We see that the sorted L at this time is only sorted according to the second keyword.
If we want to use the second keyword to sort, then use the first keyword. What about sorting? There are two methods
Example 8:
>>> L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=lambda x:(x[1],x[0])) >>> L >>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
Example 9:
>>> L = [('d',2),('a',4),('b',3),('c',2)] >>> L.sort(key=operator.itemgetter(1,0)) >>> L >>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
Why does Example 8 work? The reason is that tuples are compared from left to right. After comparing the first one, if
is equal, compare the second one