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

欢迎前往我的个人博客


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

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 a
a.update("JQK") #把world拆分添加
print a
a.remove("world") #删除,没有返回异常
print a
a.discard("J") #删除,没有不报异常
print a
a.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 dq
dq.append(8)        #在队列尾插入元素
dq.appendleft(9)    #在队列头插入元素
print dq
dq.pop()        #删除列尾
dq.popleft()    #删除列头
print dq
dq.remove(3)    #移除第一个3   
print dq
print dq.count(3)   #统计有几个3
dq.extend([22,33])  #在队列尾插入一组元素
dq.extendleft([88,99])   #在队列头插入一组元素
print dq
dq.reverse()    #反转队列
print dq
dq.rotate(1)    #所有元素右移1位,第一个变成第二个,第二个变成第三个...这样最后一个变成第一个
print dq
dq.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 heap
heapq.heappush(heap, 2)     #增加元素;
print heap
heapq.heappop(heap)     #删除最小的值
print heap
#首判断添加元素值与堆的第一个元素值对比,如果大于则删除最小元素,然后添加新的元素值,否则不更改堆
heapq.heappushpop(heap, 9) 
print heap
heapq.heapreplace(heap, 55) #删除最小元素值,添加新的元素值
print heap
print 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 list

print heapsort([1,3,5,7,9,2,4,6,8,0]) 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值