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
堆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])
阅读全文
0 0
- python入门系列13―——集合、双端队列、堆
- python中三种特殊数据结构:set集合、堆、双端队列
- Python笔记(10)----集合、堆、双端队列
- python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
- Python入门系列9:set 集合
- python入门系列19―——GUI wxpython入门
- python入门系列20―——GUI Tkinter入门
- 深入java集合系列:双端队列deque
- java集合——队列和双端队列+优先级队列
- 堆与堆排序—优先队列
- python入门系列1―——helloworld
- python入门系列2―——运算符
- python入门系列3―——数据类型
- python入门系列4―——语句
- python入门系列5―——时间日期
- python入门系列6―——函数
- python入门系列7―——模块
- python入门系列8―——I/O
- Python机器学习应用 | 期末大作业1(程序设计)
- html5实现 搜索历史记录【轻松搞定】
- Leetcode 606. Construct String from Binary Tree
- Android-QQ登录
- Unity5.x学习笔记(3)-文件上传错误:unsupported protocol
- python入门系列13―——集合、双端队列、堆
- UVaLive3942
- mysql限制用户只能访问指定数据库
- 2017年7月4日13:10:38
- es6 Symbol(八)
- pagination bug问题
- VueJs 自定义过滤器使用总结
- 数学建模————统计问题之仿真(四)
- trie