python中的sort()和sorted()函數

1. sort()函數

(1)說明

sort() 是應用在 list 上的方法,屬於列表的成員方法,執行完後會改變原來的list。

(2)語法

iterable.sort(cmp, key, reverse)

  • iterable:指要排序的list
  • cmp:指定排序時進行比較的函數,可以指定一個函數或者lambda函數。該函數帶有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則爲,大於則返回1,小於則返回-1,等於則返回0。
  • key:是一個函數,指定取待排序元素的哪一項進行排序
  • reverse:等於True表明是升序排序,等於False表明是降序排序,默認是升序
(3)例子
  • 例1 —— cmp的應用

  students爲類對象的list,每個成員有三個域,用sort進行比較時可以自己定義key函數,例如這裏要通過比較第三個數據成員來排序,代碼如下

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
students.sort(cmp = lambda student1, student2 : cmp(student1[2],student2[2]))
print(students)

輸出[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
注意: cmp在python3中已經取消了,因此上述代碼python3無法運行,推薦的是使用key

  • 例2 —— key的應用

等價於上例,代碼如下:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
students.sort(key = lambda student : student[2])
print(students)

輸出[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
注意:cmp和key都可以定義函數,但匿名函數lambda使用的比較多些,如果這兩省略key,則是對第一個數據成員進行排序,得到的結果恰巧和上述例子一樣

  • 例3
d = [4,1,4,5,3]
d,sort()
print(d)

輸出[1, 3, 4, 4, 5]

  • 例4(特殊)
d = ["abcc","abcd","abd","acd"]
d.sort()
print(d)
d.sort(key = len)
print(d)

輸出
['abcc', 'abcd', 'abd', 'acd']
['abd', 'acd', 'abcc', 'abcd']

注意
  對比兩個輸出,第一個sort()由於沒有key函數,則比較字符會從第一個字符依次比較,短字符串因爲沒有字符和長字符串比較而排到後面,得到輸出1。
  第二個sort()加了函數key,則會將長度相同的字符串聚集成一個簇,然後簇內比較字符串大小,短字符串的簇排在前面,長字符串的簇排在後面,得到輸出2。

2. sorted()函數

(1)說明

  sorted() 可以對所有可迭代的對象進行排序操作,執行完後不會改變原來的迭代對象,這裏的迭代對象用得比較多的還是list。

(2)語法

sorted(iterable, cmp, key, reverse)

這裏的參數和sort()函數是一樣的。

(3)例子

這裏的例子將上述sort()的例子的語法修改成sorted()後結果是一樣的。這裏就舉一個最簡答的例子

x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print(y)
print(x)

輸出:
[1, 2, 4, 6, 7, 9]
[4, 6, 2, 1, 7, 9]

3. 有用的鏈接

  • https://blog.csdn.net/u013759354/article/details/80243705
  • https://blog.csdn.net/memory_qianxiao/article/details/80548203
  • https://blog.csdn.net/yedoubushishen/article/details/51996692?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章