Python排序的5種高級(jí)用法分享(含代碼)
來源:投稿 作者:Fairy
編輯:學(xué)姐
排序是編程中常用的操作之一。Python提供了多種排序方法,可以適用于不同的排序需求。
那么,今天我們將介紹Python中常用的 5 種列表排序方法。
「1.使用sorted()
函數(shù)和lambda
表達(dá)式」
使用sorted()函數(shù)和lambda表達(dá)式進(jìn)行自定義排序:可以使用sorted()函數(shù)和lambda表達(dá)式來根據(jù)需要對(duì)列表、元組或字典等數(shù)據(jù)結(jié)構(gòu)進(jìn)行自定義排序。
首先,使用 sorted()
函數(shù)對(duì) my_list
進(jìn)行排序,并將排序后的結(jié)果賦值給變量 sorted_list
。在 sorted()
函數(shù)中,使用 key
參數(shù)對(duì)排序依據(jù)進(jìn)行定義,這里使用 lambda
表達(dá)式創(chuàng)建了一個(gè)簡(jiǎn)單的匿名函數(shù),該函數(shù)接受一個(gè)參數(shù) x,并返回元組中的第一個(gè)元素 x[0]。因此,sorted()
函數(shù)根據(jù)元組的第一個(gè)元素進(jìn)行排序。
最后,打印出排好序的列表 sorted_list
,最終結(jié)果如下:

「2.使用operator
模塊」
這里需要先將operator
模塊導(dǎo)入腳本中,可以使用其中的函數(shù)(如itemgetter(),attrgetter())對(duì)復(fù)雜的數(shù)據(jù)類型進(jìn)行排序。
首先,使用 items()
方法將字典轉(zhuǎn)換為元組列表,每個(gè)元組包含一個(gè)鍵和一個(gè)值。然后使用 sorted()
函數(shù)對(duì)該列表進(jìn)行排序。key 參數(shù)指定排序依據(jù),operator.itemgetter(1)
表示按照元組的第二個(gè)元素(即字典的值)進(jìn)行排序,reverse=True
表示進(jìn)行降序排序。排序后的結(jié)果是一個(gè)元組列表,每個(gè)元組包含排好序的鍵值對(duì)。
最后,使用 dict()
函數(shù)將排好序的元組列表轉(zhuǎn)換回字典格式,并將結(jié)果賦值給變量 sorted_dict
。打印出 sorted_dict
,最終結(jié)果如下:

「3.使用heapq
模塊」
heapq
是一個(gè)Python
內(nèi)置模塊,提供了對(duì)堆的基本支持。它可以對(duì)可迭代對(duì)象進(jìn)行原地堆排序并返回一個(gè)排序后的列表。
使用 heapq.nsmallest()
函數(shù)可以從一個(gè)可迭代對(duì)象中,快速地找到其中的最小元素,同時(shí)可以指定要返回的最小元素個(gè)數(shù)。該函數(shù)接受兩個(gè)參數(shù):第一個(gè)參數(shù)是要返回的元素個(gè)數(shù)(即本例中的 3),第二個(gè)參數(shù)是一個(gè)可迭代對(duì)象(即本例中的列表 my_list
)。
在本例中,我們將列表 my_list 傳遞給 heapq.nsmallest()
函數(shù),并請(qǐng)求找出前 3 個(gè)最小的數(shù)字。smallest_numbers
變量存儲(chǔ)了找到的最小數(shù)字,結(jié)果為 [1, 3, 4]。這些數(shù)字是按照升序排列的,符合預(yù)期的結(jié)果,最終結(jié)果如下:

「4.使用functools
模塊」
在某些情況下,可能需要使用多個(gè)條件對(duì)數(shù)據(jù)進(jìn)行排序。可以使用functools
模塊中的cmp_to_key()
函數(shù)來實(shí)現(xiàn)這一點(diǎn)。
該 lambda
函數(shù)接受兩個(gè)參數(shù) x 和 y,分別表示要比較的元組。首先,它通過比較兩個(gè)元組的第一個(gè)元素進(jìn)行排序,即 x[0] - y[0];如果第一個(gè)元素相同,則再按照第二個(gè)元素降序排列,即 y[1] - x[1]。因?yàn)槟J(rèn)情況下 sorted 函數(shù)是升序排列,所以在第二個(gè)比較時(shí)需要對(duì)參數(shù)位置進(jìn)行反轉(zhuǎn)。
最后,使用 sorted() 函數(shù)對(duì) my_list 進(jìn)行排序,并將結(jié)果存儲(chǔ)在 sorted_list 變量中。打印輸出 sorted_list ,最終結(jié)果如下:

「5.使用numpy
模塊」
numpy.sort(array)將按升序?qū)?shù)組進(jìn)行排序。
我們先創(chuàng)建了一個(gè)一維數(shù)組 my_array,然后調(diào)用 np.sort() 函數(shù)對(duì)該數(shù)組進(jìn)行升序排序。排序結(jié)果被存儲(chǔ)在 sorted_array 數(shù)組中。最后使用 print() 函數(shù)打印輸出 sorted_array ,最終結(jié)果如下:

推薦課程
《Python ·??AI&數(shù)據(jù)科學(xué)入門》

關(guān)注“學(xué)姐帶你玩AI”公眾號(hào)
回復(fù)“Python”了解課程詳情