集合 堆 和 双端队列


1.集合

创建集合

s = set(range(10))

和字典一样,集合元素的顺序是随意的,因此不能以元素的顺序作为依据编程

集合支持的运算

 a = set([1,2,3])
b = set([2,3,4])
other = set([99,98,97]) #|
c = a | b
print (c)
print (a.union(b)) #&
c = a&b
print (c)
print (a.intersection(b)) #-
c = a - b
print (c)
print (a.difference(b)) #^
c = a ^ b
print (c)
a.symmetric_difference(b) print (c.issubset(a))
print (c <= a)
print (c >= a)

若需要集合中包含集合 可以这样

#error
a.add(b)
#right
print (a.add(frozenset(b)))

2.堆

这是优先队列的一种 使用优先队列能够以任意顺序增加对象,而且能在极短时间内 找到 最小的元素

heappush(heap,x)  将x入堆
heappop(heap) 将堆中对小的元素弹出
heapify(heap) 将heap属性强制应用到任意一个列表
heapreplace(heap,x) 将堆中最小元素弹出,同时将x入堆
nlargest(n,iter) 返回iter中第n大的元素
nsmallest(n,iter) 返回iter中第n大的元素
 from heapq import *
from random import shuffle
data = list(range(10))
shuffle(data)
heap = []
for n in data:
heappush(heap,n) print ('init')
print (heap) print ('pop 3 min elements')
print (heappop(heap))
print (heappop(heap))
print (heappop(heap)) print ('show')
print (heap) print ('pop and push 0.5')
heapreplace(heap,0.5)
print (heap)

注意:显示(print)的堆(heap) 是按标准数组形式的表示的 (即i位置处的元素总比2*i以及2*i + 1位置处的元素小 )  好像就是创建了最小堆 :)

3.双端队列

在需要按照元素增加的顺序来移除元素时非常有用

 from collections import deque
q = deque(range(5))
print (q) print ('#q.append(5) q.appendleft(6)')
q.append(5)
q.appendleft(6)
print (q) print ('#q.pop()')
q.pop()
print (q) print ('#q.popleft()')
q.popleft()
print (q) print ('#q.rotate(3)')
q.rotate(3)
print (q)

双端队列好用的原因是他能够有效的在开头(左侧)增加和弹出元素 这是在列表中无法实现的。

除此之外,使用双端队列的好处是:能够有效的旋转元素(rotate)(也就是将它们左移或者右移,使头尾相连)

time


time模块所包括的函数能够实现以下功能:获得当前时间 操作时间和日期 从字符串读取时间以及格式化时间为字符串。

asctime([tuple]) 将时间元组转换为字符串
localtime([secs]) 将秒数转换为日期元组,以本地时间为准
mktime(tuple) 将时间元组转换为本地时间
sleep(secs) 休眠(不作任何事情)secs秒
strptime(string[,format]) 将字符串解析为时间元组
time() 当前时间(UTC)

Python还提供了两个和时间密切相关的函数 datetime(支持日期和时间的算法) 和 timeit(帮组开发人员对代码段的执行时间计时)

random


random模块包含了返回随机数的函数,可以用来模拟或者产生随机输出的程序

注意:如果真的需要随机性,应该使用os模块的urandom函数

random() 返回(0,n]之间的随机数
getrandbits() 以长整形式返回n个随机位
uniform() 返回随机实数n,其中[a,b)
randrange([start],stop,[step]) 返回range(start,stop,step)中的随机数
choice(seq) 从序列seq中返回随意元素
shuffle(seq[,random]) 原地指定序列seq
sample(seq,n) 从序列seq中选择n个随机且独立的元素

random和time示例:

随机获取区域内时间

 from time import *
from random import * date1 = (2008,1,1,0,0,0,-1,-1,-1)
date2 = (2009,1,1,0,0,0,-1,-1,-1) time1 = mktime(date1)
time2 = mktime(date2)
random_time = uniform(time1,time2)
print (asctime(localtime(random_time)))

Python简要标准库(2)的更多相关文章

  1. Python简要标准库(1)

    sys sys这个模块让你能够访问与Python解释器联系紧密的变量和函数 其中的一些在下表 F argv 命令行参数,包括脚本名称 exit([arg]) 退出当前的程序,可选参数为给定的返回值或者 ...

  2. Python简要标准库(5)

    hashlib Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 基本的生成MD密匙的函数 import hashlib md5 = hashlib.md5() md5.up ...

  3. Python简要标准库(3)

    shelve 若只需要一个简单的存储方案,那么shelve模块可以满足你大部分的需要,你所需要的只是为它提供文件名.shelve中唯一有趣的函数是open,在调用的时候他会返回一个Shelf对象 注意 ...

  4. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  5. python 使用标准库连接linux实现scp和执行命令

    import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...

  6. Python的标准库介绍与常用的第三方库

    Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...

  7. Python 3标准库 第十四章 应用构建模块

    Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章   ...

  8. python linecache标准库基础学习

    #python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...

  9. python StringIO标准库基础学习

    #标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...

随机推荐

  1. 调用save()方法,页面显示保存成功,但是数据库中没有值的原因

    在DAO层调用save()方法,页面上显示成功,但是在数据库中查找时发现数据没有保存到数据库中的原因可能是: 1.Service层中是否在调用DAO层中的save()方法之前添加注解@Transact ...

  2. Poj2919 Crane

    挑战程序设计竞赛的一道题 最近刚学了三角变换.于是就构造了个矩阵,没想到正是向量旋转的矩阵(不知道具体叫什么qwq 然后网上一半的题解是左闭右开的,另一部分是懒标记的. 于是便自己yy了一个左闭右闭的 ...

  3. 【luogu P2195 HXY造公园】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2195 fir.吐槽题目(省略1w字 sec.考虑对一个森林的维护,每棵树用并查集维护. 操作1:输出当前查询 ...

  4. HDU 1045 Fire Net(DFS 与8皇后问题类似)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. 2018年暑假ACM个人训练题6 解题报告

    A:水题 https://www.cnblogs.com/yinbiao/p/9311834.html B:考察进制的转化 https://www.cnblogs.com/yinbiao/p/9311 ...

  6. springmvc mybatis 整合

    官网 http://www.fhadmin.org/D 集成安全权限框架shiro  Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠E ...

  7. MYSQL 8.0.11 安装过程及 Navicat 链接时遇到的问题

    参考博客:https://blog.csdn.net/WinstonLau/article/details/78666423 我的系统和软件版本是这样的: 系统环境:win7.64位 MySQL版本: ...

  8. Spring : JDBC模板, 事务和测试

    JDBCTemplate简单配置:-------------------------------jdbc.properties配置----------------------------------- ...

  9. PHP基础1--环境搭建

    主要: 环境搭建 站点配置 环境搭建 web运行流程: 1. 浏览器输入地址,回车(发送请求) 2. 根据规则找到对应web服务器.规则如下: 首先在本机hosts文件中找对应IP hosts位置: ...

  10. Python读取 csv文件中文乱码处理

    需求:按行解析读取csv文件存入关系型数据库——主要是中文字体解析:遇到的问题:直接解析出来的数据为list形式,而且编码格式为unicode;解决问题:前提了解: 中文编码的规则 —— GB2312 ...