之前学过列表,元组,字典等,这几个经常使用,还有几个不是很重要,但有时候我们也能用上
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
堆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])