Python简要标准库(2)

时间:2022-02-01 05:29:56

集合 堆 和 双端队列


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)))