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