# Two methods and examples of python list sorting

- 2020-05-27 06:02:02
- OfStack

Sort List, and Python provides two methods

Method 1. Sort with List's built-in function list.sort

list.sort(func=None, key=None, reverse=False)

Python instances:

```
>>> list = [2,5,8,9,3]
>>> list
[2,5,8,9,3]
>>> list.sort()
>>> list
[2, 3, 5, 8, 9]
```

Method 2. Sort with the sequence type function sorted(list) (starting at 2.4)

Python instances:

```
>>> list = [2,5,8,9,3]
>>> list
[2,5,8,9,3]
>>> sorted(list)
[2, 3, 5, 8, 9]
```

Differences between the two methods:

sorted(list) returns an object that can be used as an expression. The original list is unchanged, and a new ordered list object is generated.

list.sort () does not return the object, changing 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: sort 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 sorting method of List in 6 is given above, in which example 3.4.5.6 can pair one item in List item

Sort the comparison keywords.

Efficiency comparison:

cmp < DSU < key

Through experimental comparison, method 3 is slower than method 6, and method 6 is slower than method 4. Method 4 and method 5 are basically the same

Multi-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)]
```

As we can see, the ordered L is only sorted by the second keyword,

What if we want to sort by the second keyword and then sort by the first keyword? There are two ways

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:

```
>>> list = [2,5,8,9,3]
>>> list
[2,5,8,9,3]
>>> sorted(list)
[2, 3, 5, 8, 9]
```

0
Why does example 8 work? The reason is that tuple compares left to right, compares the first, and if they're equal, compares the second