日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

python中的排序操作和heapq模块的介绍(代码示例)

發(fā)布時間:2023/12/15 综合教程 22 生活家
生活随笔 收集整理的這篇文章主要介紹了 python中的排序操作和heapq模块的介绍(代码示例) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本篇文章給大家?guī)淼膬?nèi)容是關(guān)于python中的排序操作和heapq模塊的介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

說到排序,很多人可能第一想到的就是sorted,但是你可能不知道python中其實(shí)還有還就中方法喲,并且好多種場景下效率都會比sorted高。那么接下來我就依次來介紹我所知道的排序操作。
sorted(iterable, *, key=None, reverse=False)

list1=[1,6,4,3,9,5]
list2=['12','a6','4','c34','b9','5']

print(sorted(list1))    #[1, 3, 4, 5, 6, 9]
print(sorted(list2))    #['12', '4', '5', 'a6', 'b9', 'c34']
#總結(jié)上面兩種排序:字符串排序根據(jù)元素首字符的ASCII比較進(jìn)行排序,
#數(shù)字類型按照大小排序,數(shù)字不能混合排序
list3=[
    {'name':'jim','age':23,'price':500},
    {'name':'mase','age':23,'price':600},
    {'name':'tom','age':25,'price':2000},
    {'name':'alice','age':22,'price':300},
    {'name':'rose','age':21,'price':2400},
]
print(sorted(list3,key=lambda s:(s['age'],s['price'])))
#[{'name': 'rose', 'age': 21, 'price': 2400}, {'name': 'alice', 'age': 22, 'price': 300}, {'name': 'jim', 'age': 23, 'price': 500}, {'name': 'mase', 'age': 23, 'price': 600}, {'name': 'tom', 'age': 25, 'price': 2000}]
最后的reverse參數(shù)我就不作說明了,就是把結(jié)果進(jìn)行倒序,可用作降序排列
介紹一種比lambda效率高的方式:
operator模塊中的方法itemgetter
>>> itemgetter(1)('ABCDEFG')
'B'
>>> itemgetter(1,3,5)('ABCDEFG')
('B', 'D', 'F')
>>> itemgetter(slice(2,None))('ABCDEFG')
'CDEFG
運(yùn)用到上述代碼
print(sorted(list3,key=itemgetter('age','price')))    #結(jié)果同上但效率會比較高

登錄后復(fù)制

接下來的排序操作涉及到一個非常重要的一種數(shù)據(jù)結(jié)構(gòu)——堆,不過今天我主要介紹這個模塊中的方法,具體什么是堆,及其還有一種數(shù)據(jù)結(jié)構(gòu)——棧,有時間我會專門寫一篇文章來介紹。
heapq(Python內(nèi)置的模塊)

__all__ = ['heappush', 'heappop', 'heapify', 'heapreplace', 'merge',
           'nlargest', 'nsmallest', 'heappushpop']

登錄后復(fù)制

接下來我們一一介紹。
nlargest與nsmallest,通過字面意思可以看出方法大致的作用,接下來動手測驗(yàn)

nlargest(n, iterable, key=None)
nsmallest(n, iterable, key=None)
#n:查找個數(shù)    iterable:可迭代對象    key:同sorted
list1=[1,6,4,3,9,5]
list2=['12','a6','4','c34','b9','5']
list3=[
    {'name':'jim','age':23,'price':500},
    {'name':'mase','age':23,'price':600},
    {'name':'tom','age':25,'price':2000},
    {'name':'alice','age':22,'price':300},
    {'name':'rose','age':21,'price':2400},
]
from operator import itemgetter
import heapq
print(heapq.nlargest(len(list1),list1))
print(heapq.nlargest(len(list2),list2))
print(heapq.nlargest(len(list3),list3,key=itemgetter('age','price')))
#以上代碼輸出結(jié)果同sorted
print(heapq.nsmallest(len(list1),list1))
print(heapq.nsmallest(len(list2),list2))
print(heapq.nsmallest(len(list3),list3,key=itemgetter('age','price')))
#結(jié)果是降序
[1, 3, 4, 5, 6, 9]
['12', '4', '5', 'a6', 'b9', 'c34']
[{'name': 'rose', 'age': 21, 'price': 2400}, {'name': 'alice', 'age': 22, 'price': 300}, {'name': 'jim', 'age': 23, 'price': 500}, {'name': 'mase', 'age': 23, 'price': 600}, {'name': 'tom', 'age': 25, 'price': 2000}]

登錄后復(fù)制

heappush,heappop,heapify,heapreplace,heappushpop
堆結(jié)構(gòu)特點(diǎn):heap[0]永遠(yuǎn)是最小的元素(利用此特性排序)

heapify:對序列進(jìn)行堆排序,
heappush:在堆序列中添加值
heappop:刪除最小值并返回
heappushpop:添加并刪除堆中最小值且返回,添加之后刪除
heapreplace:添加并刪除隊(duì)中最小值且返回,刪除之后添加
nums=[54,23,64.,323,53,3,212,453,65]
heapify(nums)    #先進(jìn)行堆排序
print(heappop(nums))    #3
print(heappush(nums,50))    #添加操作,返回None
print(heappushpop(nums,10))    #由于是添加后刪除,所以返回10
print(heappop(nums))    #23
print(heapreplace(nums,10))    #和heappushpop,返回50
print(nums)    #[10, 53, 54, 65, 323, 64.0, 212, 453]

登錄后復(fù)制

merge:合并多個序列

list1 = [1, 2, 3, 4, 5, 12]
set1 = {2, 3, 9, 23, 54}
s = list(merge(list1,set1))
print(s)    #[1, 2, 2, 3, 3, 4, 5, 9, 12, 54, 23]
#發(fā)現(xiàn)輸出結(jié)果不僅進(jìn)行了合并,還進(jìn)行了排序,有意思哈,可是換個代碼測驗(yàn),你再看一下
list1 = [31, 2, 83, 24, 5, 12]
set1 = {2, 83, 9, 23, 54}
s = list(merge(list1,set1))
print(s)    #[2, 9, 31, 2, 83, 24, 5, 12, 83, 54, 23]
#你們肯定想這是什么鬼,一點(diǎn)都沒有頭緒,其實(shí)經(jīng)過我的多次測驗(yàn),還是有規(guī)律的,但是由于沒有什么作用就不大篇幅說明了,喜歡刨根問題的小伙伴可以嘗試自己思考一下。

登錄后復(fù)制

小伙伴們有沒有想我為何介紹這個模塊,并且和排序放在一起呢,其實(shí)在很多時候我們需要找序列中的前幾個最大值或者最小值,使用此模塊中的方法是最好不過的了。
如果需要全部排序我們使用sorted,需要查找最大或最小的幾個或者多個我們使用alargest/asmallest,查找最大最小使用max/min

以上就是python中的排序操作和heapq模塊的介紹(代碼示例)的詳細(xì)內(nèi)容,更多請關(guān)注風(fēng)君子博客其它相關(guān)文章!

總結(jié)

以上是生活随笔為你收集整理的python中的排序操作和heapq模块的介绍(代码示例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。