python入门系列13―——集合、双端队列、堆

来源:互联网 发布:蘑菇网络词是什么意思 编辑:程序博客网 时间:2024/05/17 20:32

欢迎前往我的个人博客


之前学过列表,元组,字典等,这几个经常使用,还有几个不是很重要,但有时候我们也能用上

1.集合 set

set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素. 集合对象还支持并、交、差、对称差等。

我们来看看使用:

a = set("helo python")print a  #注意输出去重 b = set("helo world")print b  #注意输出去重 print a&b #交集print a|b #并集print a-b #差集print a-b #差集print a^b #对称差:a和b的交集减去并集print len(a) #长度a.add("world") #把world作为整体添加print aa.update("JQK") #把world拆分添加print aa.remove("world") #删除,没有返回异常print aa.discard("J") #删除,没有不报异常print aa.pop() #随机删除print a

2.双端队列
deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。

双端队列拥有两端:队首(front)、队尾(rear),但与队列不同的是,插入操作在两端(队首和队尾)都可以进行,删除操作也一样。

例子:

import collections #导入模块print dir(collections.deque) #查看模块,变量和函数mylist=[1,2,3]dq =collections.deque(mylist) #利用list创建一个双端队列dq =collections.deque([1,3,5,2,3]) #直接创建一个双端队列print dqdq.append(8)        #在队列尾插入元素dq.appendleft(9)    #在队列头插入元素print dqdq.pop()        #删除列尾dq.popleft()    #删除列头print dqdq.remove(3)    #移除第一个3   print dqprint dq.count(3)   #统计有几个3dq.extend([22,33])  #在队列尾插入一组元素dq.extendleft([88,99])   #在队列头插入一组元素print dqdq.reverse()    #反转队列print dqdq.rotate(1)    #所有元素右移1位,第一个变成第二个,第二个变成第三个...这样最后一个变成第一个print dqdq.rotate(-2)   #所有元素左移2位,第一个变成倒数第二个,第二个变成倒数第一个...print dq


3.堆
堆heap是一种特殊的数据结构
堆的定义:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
"ki<=k2i,ki<=k2i+1;或ki>=k2i,ki>=k2i+1.(i=1,2,…,[n/2])"
这是标准的堆的定义,但是python 中并没有独立的堆类型,只是包含一些堆操作函数的模块(heapq =heap+queue首字母),其实堆在python中属于一种特殊的列表;

例子:

import heapq #导入模块print dir(heapq) #查看模块,变量和函数heap=[1,3,4]print heapheapq.heappush(heap, 2)     #增加元素;print heapheapq.heappop(heap)     #删除最小的值print heap#首判断添加元素值与堆的第一个元素值对比,如果大于则删除最小元素,然后添加新的元素值,否则不更改堆heapq.heappushpop(heap, 9) print heapheapq.heapreplace(heap, 55) #删除最小元素值,添加新的元素值print heapprint heapq.nlargest(2, heap)  #查询堆中的最大的2个元素print heapq.nsmallest(2, heap)  #查询堆中的最小的2个元素

我们可以利用堆的特性,对list进行排序:

方法一:

import heapq #导入模块def heapsort(list):    h=[]    for i in list:        heapq.heappush(h,i)    return [heapq.heappop(h) for i in range(len(h))]print heapsort([1,3,5,7,9,2,4,6,8,0]) 
结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
方法二:

import heapq #导入模块def heapsort(list):    heapq.heapify(list)    heap = []    while list:        heap.append(heapq.heappop(list))    list[:] = heap    return listprint heapsort([1,3,5,7,9,2,4,6,8,0])