欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解python之heapq模塊及排序操作

 更新時間:2019年04月04日 08:40:22   作者:二十一  
說到排序,很多人可能第一想到的就是sorted,但是你可能不知道python中其實還有還就中方法喲,并且好多種場景下效率都會比sorted高。那么接下來我就依次來介紹我所知道的排序操作

說到排序,很多人可能第一想到的就是sorted,但是你可能不知道python中其實還有還就中方法喲,并且好多種場景下效率都會比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']
#總結上面兩種排序:字符串排序根據(jù)元素首字符的ASCII比較進行排序,
#數(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ù)我就不作說明了,就是把結果進行倒序,可用作降序排列
介紹一種比lambda效率高的方式:
operator模塊中的方法itemgetter
>>> itemgetter(1)('ABCDEFG')
'B'
>>> itemgetter(1,3,5)('ABCDEFG')
('B', 'D', 'F')
>>> itemgetter(slice(2,None))('ABCDEFG')
'CDEFG
運用到上述代碼
print(sorted(list3,key=itemgetter('age','price'))) #結果同上但效率會比較高

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

heapq(Python內(nèi)置的模塊)

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

接下來我們一一介紹。

nlargest與nsmallest,通過字面意思可以看出方法大致的作用,接下來動手測驗

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')))
#以上代碼輸出結果同sorted

print(heapq.nsmallest(len(list1),list1))
print(heapq.nsmallest(len(list2),list2))
print(heapq.nsmallest(len(list3),list3,key=itemgetter('age','price')))
#結果是降序
[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}]

heappush,heappop,heapify,heapreplace,heappushpop

堆結構特點:heap[0]永遠是最小的元素(利用此特性排序)

heapify:對序列進行堆排序,
heappush:在堆序列中添加值
heappop:刪除最小值并返回
heappushpop:添加并刪除堆中最小值且返回,添加之后刪除
heapreplace:添加并刪除隊中最小值且返回,刪除之后添加

nums=[54,23,64.,323,53,3,212,453,65]
heapify(nums)  #先進行堆排序
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]

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)輸出結果不僅進行了合并,還進行了排序,有意思哈,可是換個代碼測驗,你再看一下

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]
#你們肯定想這是什么鬼,一點都沒有頭緒,其實經(jīng)過我的多次測驗,還是有規(guī)律的,但是由于沒有什么作用就不大篇幅說明了,喜歡刨根問題的小伙伴可以嘗試自己思考一下。

小伙伴們有沒有想我為何介紹這個模塊,并且和排序放在一起呢,其實在很多時候我們需要找序列中的前幾個最大值或者最小值,使用此模塊中的方法是最好不過的了。

如果需要全部排序我們使用sorted,需要查找最大或最小的幾個或者多個我們使用alargest/asmallest,查找最大最小使用max/min

相關文章

  • 如何運行帶參數(shù)的python腳本

    如何運行帶參數(shù)的python腳本

    這篇文章主要介紹了如何運行帶參數(shù)的python腳本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python二進制串轉字符串的方法詳解

    python二進制串轉字符串的方法詳解

    這篇文章主要介紹了python二進制串轉字符串的方法詳解,使用json,可以自動檢測編碼,但需要注意的是,它返回的是python對象,不一定是字符串,具體是什么對象要視原始內(nèi)容而定,需要的朋友可以參考下
    2023-11-11
  • python 按鈕點擊關閉窗口的實現(xiàn)

    python 按鈕點擊關閉窗口的實現(xiàn)

    這篇文章主要介紹了python 按鈕點擊關閉窗口的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • pytorch中model.named_parameters()與model.parameters()解讀

    pytorch中model.named_parameters()與model.parameters()解讀

    這篇文章主要介紹了pytorch中model.named_parameters()與model.parameters()使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 利用Python pandas對Excel進行合并的方法示例

    利用Python pandas對Excel進行合并的方法示例

    這篇文章主要給大家介紹了關于利用Python pandas對Excel進行合并的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Pytorch中實現(xiàn)只導入部分模型參數(shù)的方式

    Pytorch中實現(xiàn)只導入部分模型參數(shù)的方式

    今天小編就為大家分享一篇Pytorch中實現(xiàn)只導入部分模型參數(shù)的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Django項目如何配置Memcached和Redis緩存?選擇哪個更有優(yōu)勢?

    Django項目如何配置Memcached和Redis緩存?選擇哪個更有優(yōu)勢?

    這篇文章主要介紹了Django項目如何配置Memcached和Redis緩存,幫助大家更好的理解和學習使用django框架,感興趣的朋友可以了解下
    2021-04-04
  • python實現(xiàn)同時給多個變量賦值的方法

    python實現(xiàn)同時給多個變量賦值的方法

    這篇文章主要介紹了python實現(xiàn)同時給多個變量賦值的方法,涉及Python中變量賦值的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • windows下python 3.6.4安裝配置圖文教程

    windows下python 3.6.4安裝配置圖文教程

    這篇文章主要為大家詳細介紹了windows下python 3.6.4安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Pygame Time時間控制的具體使用詳解

    Pygame Time時間控制的具體使用詳解

    pygame.time 時間控制模塊,是 Pygame 中使用頻率較高的模塊,其主要功能是管理時間和游戲幀數(shù)率,本文就來詳細的介紹一下,感興趣的可以了解一下
    2021-11-11

最新評論