Maison  >  Article  >  développement back-end  >  Opérations de tri en python et introduction au module heapq (exemple de code)

Opérations de tri en python et introduction au module heapq (exemple de code)

不言
不言avant
2018-12-15 10:15:242372parcourir

Le contenu de cet article concerne l'opération de tri en Python et l'introduction du module heapq (exemples de code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Quand il s'agit de trier, la première chose à laquelle beaucoup de gens peuvent penser est triée, mais vous ne savez peut-être pas qu'il existe en fait une meilleure méthode en python, et elle est plus efficace que triée en de nombreux scénarios. Ensuite je présenterai tour à tour les opérations de tri que je connais.
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')))    #结果同上但效率会比较高

La prochaine opération de tri implique une structure de données très importante - le tas , mais aujourd'hui je vais présentez principalement les méthodes de ce module, en particulier ce qu'est un tas, et il existe une autre structure de données - la pile. J'écrirai un article spécial pour la présenter quand j'aurai le temps.
heapq (module intégré Python)

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

Nous les présenterons ensuite un par un.
le plus grand et le plus petit, vous pouvez voir la fonction générale de la méthode à travers le sens littéral. Vient ensuite le test pratique

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}]

heappush, heappop, heapify, heapreplace, heappushpop<.>
Caractéristiques de la structure du tas : le tas[0] est toujours le plus petit élément(Utilisez cette fonctionnalité pour trier)

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]

fusionner : fusionner plusieurs séquences

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]
#你们肯定想这是什么鬼,一点都没有头绪,其实经过我的多次测验,还是有规律的,但是由于没有什么作用就不大篇幅说明了,喜欢刨根问题的小伙伴可以尝试自己思考一下。
Vous êtes-vous déjà demandé pourquoi j'ai introduit ce module et l'ai mis en place avec le tri. En fait, nous devons souvent trouver les premières valeurs maximales ou minimales de la méthode ? d'utiliser ce module est Rien ne pourrait être mieux.


Si vous avez besoin de tous les trier, nous utilisons triés. Si vous avez besoin de trouver le plus grand ou le plus petit, nous utilisons alert/asmallest. Pour trouver le plus grand et le plus petit, utilisez max/min

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer