python中的排序函数(sort或sorted)可以操作list进行排序。
1、sort和sorted的主要区别是:
1)sort是对原list进行排序,sorted会生成新的list。
2)sort函数没有返回值,sorted函数无论迭代对象是什么都会返回一个list
3)sort只能应用在list上,sorted可以应用在所有的可迭代对象上。
4)函数的使用方法不同,如下:
lst. sort(key[, reverse]])
# 下面为默认参数
lst. sort(key = None, reverse = False)
- key -- 指定排序时进行比较的元素,只有一个参数,可以指定一个函数或者lambda函数。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
sorted(iterable[,key[, reverse]])
# 默认参数与sort一样
sorted(iterable, key = None, reverse = False)
- 比sort函数的参数多了一个iterable--可迭代对象。定义如下:
for...of
循环遍历。 换句话说就是
for...of
循环内部调用的是数据结构
Symbol.iterator
方法。(参考
链接)
2、二维数组按列排序以及字符串数组排序
下面的字符串数组虽然是一维的,但是由于每个字符串可以看作一个字符数组,所以也相当于二维数组(但其实并不是二维数组),这里为了对比记忆,我将他们放到了一起。在默认参数下,数组元素将按照列比较,如果同一列的元素数值相等,那么将会比较下一列的元素,如果某一行的元素包含了另一行,如[1,3,5,6]包含了[1,3,5],那么[1,3,5,6]应该排在后面。字符串也同理。字符串的比较应该是比较每一个字符的ascci码,默认情况下,ascci码大的排名靠前。
a = [[1,2,3],[1,3,5,6],[1,3,5],[1,2,5,6]] a.sort() print(a) a = ["tomy", "join", "tom", "tam"] a.sort() print(a)
结果为:
[[1, 2, 3], [1, 2, 5, 6], [1, 3, 5], [1, 3, 5, 6]]
['join', 'tam', 'tom', 'tomy']
3、按照关键字指定列表中的元素排序
1)lambda函数
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] students.sort(key = lambda student:student[2]) print(students) students.sort(key = lambda student:student[1]) print(students)
结果:
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
list.sort() 方法只为 list 定义。而 sorted() 函数可以接收任何的 iterable。如字典可以按照其关键字进行排序:
dic = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
# 默认由小到大排序 lst = sorted(dic) print(lst)
# 由大到小排序 lst = sorted(dic, key=lambda s:-s) print(lst)
结果:
[1, 2, 3, 4, 5] [5, 4, 3, 2, 1]
2)自定义比较函数
python3移除了cmp()
函数,但提供了六个丰富的比较运算符,详见链接
本文参考的链接:
https://blog.csdn.net/memory_qianxiao/article/details/80548203
https://www.runoob.com/python3/python3-func-sorted.html