python中的list排序问题以及sort,sorted的使用
列表list排序是一种非常常见的操作,里面有很多的方法也有很多的坑,这里简单的记录一下。
- sorted 方法
|
|
sorted 方法传入一个列表,返回一个新的列表,并不影响原来列表的顺序,从上面的结果来看,数字排在了字符串之前,其实它是按照字符的ASCII的顺序排列的,那如果列表里是字符串呢?
|
|
明显它是按照第一个字符来排,第一个字符相同再按第二个排。
sorted() 方法还有另外一个参数,reverse,当它为True的时候,将会倒序排列。
|
|
可否直接改变原list的结构,而不是生成一个新的list呢? 当然可以
- sort方法
|
|
此时原列表l的结构已经变了,且该函数没有返回值,所以如果写成newL = l.sorr()
并不能得到一个新的列表,newL为空,所以不要用错了
这种排序也太简单了,我可否按照我自已的方法来排序呢?当然可以
- 自定义排序
需要提供一个排序的方法,该方法要有三种返回值,假如有两个值a1和a2,通过某种计算,如果返回大于0(True)的值,则a1排在后面,如果小于0(False),a1排在前面,如果等于0,则a1和a2顺序不变,看代码
|
|
这里引出另外一个问题,字典是无序的,想要排字典,其实是排一组字典 这里希望将上述的list排序,按照每条记录中的’score’排序。如果’score’字段的值相等,则按照’first’的值排序。如果’first’依旧相等,则按照’second’排序。如果’second’相等,则按照’third’字段的值来排序。 该排序的结果为
{‘second’: 50, ‘score’: 100, ’name’: ‘jk’, ’third’: 0, ‘first’: 50} {‘second’: 30, ‘score’: 90, ’name’: ‘zz’, ’third’: 10, ‘first’: 50} {‘second’: 30, ‘score’: 90, ’name’: ‘yyx’, ’third’: 20, ‘first’: 40} {‘second’: 30, ‘score’: 90, ’name’: ‘zs’, ’third’: 20, ‘first’: 40}
还可以用sorted方法
|
|
参考文章 python list 自定义排序 Python之排序函数sort() 和 sorted() Python的排序:关于sort()与sorted()

- 文章标题: python中的list排序问题以及sort,sorted的使用
- 本文链接: https://www.yangyanxing.com/article/python-list-sort.html
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。