2018-10-30 030 列表排序

2018-10-30  本文已影响65人  杜若飞er

我保证马上就真的暂时不用列表了……真的……

list.sort

如果大家最近试着做了一些Python的小题目,可能对列表的排序应用之广和方法之便捷赞赏有加(尤其是学过C++的排序法们……),不过需要注意的是,list.sort这个方法是有返回值的,虽然是个none,但是“没有”和“不存在”究竟还是两个概念,这样的设计原则是为了提醒用户,这样的方法具体执行上属于“原地爆炸”,会直接改变原来的列表而不会搞一个新的。
这样的设计逻辑实际上是Python的一个惯例,用一个None的返回值来表示,虽然有改变,但是并没有产生新的对象,用户可以通过none来获知这样的就地改动;但是这样的方法虽然有好处,却也造成了一个小小的困难,那就是我们没法像其他的一些方法一样“串联起来”,造不成连贯接口——关于连贯接口,从字面上也很好理解,就像一条流水线,这一步的结果当作下一步的原材料,但是如果有一些步骤产生的返回值是None,那流水线也就没法进行下去了。
为了改变这种弊端,我们介绍一个新的函数sorted,它会新建一个对象作为返回值,其他的属性和我们熟悉的sort基本一致,值得注意的是,sorted接受的可以是任何可迭代对象,甚至不可变更的序列也可以拿来sorted一下,不管接受的是什么,它返回的东西都是一个List

sort和sorted都有两个可选的参数:
reverse:是一个布尔值,默认为True,也就是默认降序排列;
key:key的用法比较多,作用也比较大,基本上,我们可以使用诸如key=len来用长度进行排序或者key=str.lower忽略大小写排序,以及相类似的更多的key值,key默认是恒等函数,也就是用元素自己的值来进行排序;
我们看例子:

list_stu = ['drf','zxy','lza','ysz']
print(sorted(list_stu))
print(list_stu)

输出结果是:

['drf', 'lza', 'ysz', 'zxy']
['drf', 'zxy', 'lza', 'ysz']

很显然,经过sorted之后,原来的list_stu并没有改变;

print(sorted(list_stu,key=len))

输出结果是:

['drf', 'zxy', 'lza', 'ysz']

按长度排序——长度都一样,排个锤子;

上一篇 下一篇

猜你喜欢

热点阅读