# 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) ```