# list.sort和sorted
list.sort方法会就地排序列表,不会生成新的列表对象,返回值为None,类似的还有random.shuffle方法。sorted函数则会生成一个新的列表对象返回。list.sort方法和sorted函数都有两个可选的关键字参数,reverse和key。
- reverse:默认False为顺序、True为逆序
- key:一个只有一个参数输入的函数名,比如,字符排序用key=str.lower忽略大小写,key=len用来基于字符长短排序
```python
fruits = ['greape', 'raspberry', 'apple', 'banana']
sorted(fruits)
fruits.sort()
sorted(fruits, key=len)
fruits.sort(key=len)
```
# bisect二分法模块
bisect模块包含有两个主要的函数,bisect和insort,利用二分法查找和插入有序序列。
## bisect搜索
`bisect(haystack, needle)` 在干草垛中搜索针的位置,该位置满足条件:将needle插入该位置,haystack仍旧保持升序。即bisect函数返回位置前面的值都小于等于needle。
```python
import bisect
import sys
HAYSTACK = [1, 4, 5, 6, 8, 12, 15, 20, 21, 23, 26, 29, 30]
NEEDLES = [0, 1, 2, 5, 8, 10, 22, 23, 29, 30, 31]
```
## insort插入
`insort(seq, item)` 将变量item插入到序列seq中,并保持seq升序。
```python
import bisect
import random
SIZE = 7
random.seed(2021)
my_list = []
for i in range(SIZE):
new_item = random.randrange(SIZE*2)
bisect.insort(my_list, new_item)
print('%2d ->' % new_item, my_list)
```