Heim > Backend-Entwicklung > Python-Tutorial > Sortieroperationen in Python und Einführung in das Heapq-Modul (Codebeispiel)

Sortieroperationen in Python und Einführung in das Heapq-Modul (Codebeispiel)

不言
Freigeben: 2018-12-15 10:15:24
nach vorne
2411 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Sortieroperation in Python und der Einführung des Heapq-Moduls (Codebeispiele). Ich hoffe, dass er für Sie hilfreich ist.

Wenn es um das Sortieren geht, denken viele Leute vielleicht zuerst an Sortieren, aber Sie wissen vielleicht nicht, dass es in Python tatsächlich eine bessere Methode gibt, und diese ist effizienter als das Sortieren viele Szenarien. Dann werde ich die mir bekannten Sortieroperationen der Reihe nach vorstellen.
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']
#总结上面两种排序:字符串排序根据元素首字符的ASCII比较进行排序,
#数字类型按照大小排序,数字不能混合排序
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参数我就不作说明了,就是把结果进行倒序,可用作降序排列
介绍一种比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')))    #结果同上但效率会比较高
Nach dem Login kopieren

Der nächste Sortiervorgang beinhaltet einen sehr wichtigen Datenstruktur-Heap, aber heute werde ich ihn hauptsächlich vorstellen Methoden in diesem Modul, insbesondere was ein Heap ist, und eine andere Datenstruktur – der Stack. Ich werde einen speziellen Artikel schreiben, um ihn vorzustellen, wenn ich Zeit habe.
heapq (in Python integriertes Modul)

__all__ = ['heappush', 'heappop', 'heapify', 'heapreplace', 'merge',
           'nlargest', 'nsmallest', 'heappushpop']
Nach dem Login kopieren

Lassen Sie uns sie einzeln vorstellen.
Groß und klein, Sie können die allgemeine Wirkung der Methode anhand der wörtlichen Bedeutung und dann des praktischen Tests erkennen

nlargest(n, iterable, key=None)
nsmallest(n, iterable, key=None)
#n:查找个数    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}]
Nach dem Login kopieren

heappush, heappop, heapify, heapreplace, heappushpop
Funktionen der Heap-Struktur: Heap[0] ist immer das kleinste Element(Verwenden Sie diese Funktion zum Sortieren)

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]
Nach dem Login kopieren

Zusammenführen: Mehrere Sequenzen zusammenführen

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]
#发现输出结果不仅进行了合并,还进行了排序,有意思哈,可是换个代码测验,你再看一下
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]
#你们肯定想这是什么鬼,一点都没有头绪,其实经过我的多次测验,还是有规律的,但是由于没有什么作用就不大篇幅说明了,喜欢刨根问题的小伙伴可以尝试自己思考一下。
Nach dem Login kopieren

Freunde Haben Sie sich jemals gefragt, warum ich dieses Modul eingeführt und es mit der Sortierung zusammengestellt habe? Tatsächlich ist es oft am besten, die ersten paar Maximal- oder Minimalwerte in der Sequenz zu finden in diesem Modul.
Wenn Sie alle sortieren müssen, verwenden wir „sortiert“. Wenn Sie die größten oder kleinsten oder mehr finden müssen, verwenden wir „alarm/asmallest“. Um die größten und kleinsten zu finden, verwenden Sie „max/min“. >

Das obige ist der detaillierte Inhalt vonSortieroperationen in Python und Einführung in das Heapq-Modul (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage