python實現數組按列排序、字符串數組排序、按照關鍵字排序--sort和sorted的使用


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--可迭代對象。定義如下:
一個數據結構(數組、Map、Set,某些類似數組的對象——比如arguments對象,DOM NodeList對象,Generator對象,字符串等),才可以被 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM