python如何列表排序,Python如何对列表排序
@ toc #如何用Python对列表进行排序
文章的前言是:首先,使用列表成员函数List . sort();第二,使用内置函数Sorted();第三,使用堆队列算法。
前言是python语言中经常使用的一种数据类型。在代码实现中,经常会涉及到排序。这里总结了一些常用的方法。
I .使用列表成员函数list.sort () help (list.sort)关于method _ descriptor: sort(.)l.sort (CMP=none,key=none,reverse=false)-稳定排序* inplace *CMP (x,y)-1,0,1 CMP-可选参数,如果指定,该参数的方法将用于排序。
Key它主要是一个用于比较的元素,只有一个参数。特定函数的参数取自iterable对象,并指定iterable对象中的一个元素进行排序。
reverse排序规则,reverse=真降序,reverse=假升序(默认)。
注意:一般来说,lambda表达式可以用于cmp和key。
使用示例如下:
Lsta=[9,4,5,1,3] lstb=[(9,4),(4,5),(5,1),(1,3),(3,9)]lsta . sort()lstb . sort(key=lambda x:)9][(5,1,(1,3),(9,4),(4,5),(3,9)] lstb.sort (key=lambda x: x [0],reverse=true) # print lstb [(9,9) 3)]其次,使用内置函数sorted () help (sorted).)sorted (iterable,CMP=none,key=none,reverse=false)-新排序列表iterable:是迭代类型,不需要。
Cmp:用于比较的函数,由key决定,有默认值,对集合中的某一项进行迭代;
Key:使用列表元素的一个属性和函数作为键,有默认值,迭代集合中的一个项;
反向:排序规则。reverse=True或reverse=False,有默认值,默认情况下按升序排列。
返回值:是有序迭代类型,与iterable相同。
注意:一般来说,lambda表达式可以用于cmp和key。排序函数也可用于
sort()和sorted()的区别在于sort就地重新排列列表,而sorted()生成一个新列表。
使用示例如下:
lstA=[9,4,5,1,3]lstB=[(9,4),(4,5),(5,1),(1,3),(3,9)]print sorted(lstA)[1,3,4,5,9]print sorted(lstB,key=lambda x:x[1],Reverse=True)#按第二个值[(3,9),(4,5),(9,4),(1,3),(5,1)]降序排列III .使用Heapq- Heaq,一种堆队列算法。该模块提供了堆队列算法的实现,也称为优先级队列算法。主要功能如下:
Heapq.heappush(heap,item)将item的值添加到堆中,保持堆不变。
Heapq.heappop(heap)弹出并返回堆的最小元素,保持堆不变。如果堆是空的,抛出IndexError。使用heap[0],您可以只访问最小的元素而不弹出它。
Heapq.heappushpop(heap,item)将项目放入堆中,然后弹出并返回堆的最小元素。这种组合操作比先调用heappush()再调用heappop()更高效。
Heap.heapify (x)在线性时间内将列表x转换成堆。
Hea.nlargest (n,iterable [,key])从iterable对象中返回最大的n个元素。
Heapq.nsmallest (n,iterable [,key])返回iterable对象中最小的n个元素。
使用堆队列算法对链表进行排序;
import heapqlstA=[9,4,5,1,3]lstB=[(9,4),(4,5),(5,1),(1,3),(3,9)]print heapq。nsmallest(len(lstA),lstA)print heapq。nsmallest(len(lstB),lstB,key=lambda x:x[1])#按照第二项值进行降序排列[1,3,4,5,9][(5,1),(1,3),(9,4),(4,5),(3,9)]def heapsort(lst):#使用目录数据构造堆rst=[]for x in lst:heapq。堆推送(rst,x)return[heapq。范围内I的堆弹出(rst)(len(rst))]打印堆排序(lstA)打印堆排序(lstB)[1,3,4,5,9][(1,3),(3,9),(4,5),(5,1),(9,4)]def堆排序(lst):#直接将目录转换为堆heapq。heap ify(lst)return[heapq。范围内I的堆弹出(lst)(len(lst))]打印堆排序(lstA)打印堆排序(lstB)[1,3,4,5,9][(1,3),(3,9),(4,5),(5,1),(9,4)]
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。