sort与sorted区别
我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序,
- 方法1.用List的成员函数sort进行排序
- 方法2.用built-in函数sorted进行排序
list.sort()与sorted()的不同在于,list.sort是在原位重新排列列表,而sorted()是产生一个新的列表。python中列表的内置函数list.sort()只可以对列表中的元素进行排序,而全局性的sorted()函数则对所有可迭代的对象都是适用的;并且list.sort()函数是内置函数,会改变当前对象,而sorted()函数只会返回一个排序后的当前对象的副本,而不会改变当前对象。
原型:sort(fun,key,reverse=False)
sorted(itrearble, cmp=None, key=None,reverse=False)
内置函数sort()
参数fun是表明此sort函数是基于何种算法进行排序的,一般默认情况下python中用的是归并排序,并且一般情况下我们是不会重写此参数的,所以基本可以忽略;
参数key用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;
参数reverse是用来表明是否逆序,默认的False情况下是按照升序的规则进行排序的,当reverse=True时,便会按照降序进行排序。
1 |
|
全局函数sorted()
对于sorted()函数中key的重写,和sort()函数中是一样的,所以刚刚对于sort()中讲解的方法,都是适用于sorted()函数中。sorted()最后会将排序的结果放到一个新的列表中,而不是对iterable本身进行修改。
1 | sorted('123456') # 字符串 |
对元素指定的某一部分进行排序,关键字排序
1 | # 想要按照-后的数字的大小升序排序。要用到key |
这相当于把这个关键字当做字符串了,很显然,在python中,’2’ > ‘10’。cmp不怎么用,因为key和reverse比单独一个cmp效率要高。
lambda的各种用法
1, 用在过滤函数中,指定过滤列表元素的条件:
1 | filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9]) |
2, 用在排序函数中,指定对列表中所有元素进行排序的准则:
1 | sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)) |
3, 用在reduce函数中,指定列表中两两相邻元素的结合条件
1 | reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9]) |
4, 用在map函数中,指定对列表中每一个元素的共同操作
1 | map(lambda x: x+1, [1, 2,3]) |
5, 从另一函数中返回一个函数,常用来实现函数装饰器(Wrapper),例如python的function decorators
1 | def transform(n): |
6,列表排序
1 | a = [(1, 2), (4, 1), (9, 10), (13, -3)] |
7,列表并行排序
1 | data = zip(list1, list2) |