Python简要标准库(2)

 

集合 堆 和 双端队列

 


 

1.集合

创建集合

 1 s = set(range(10)) 

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

 

集合支持的运算

 1 a = set([1,2,3])
 2 b = set([2,3,4])
 3 other = set([99,98,97])
 4 
 5 #|
 6 c = a | b
 7 print (c)
 8 print (a.union(b))
 9 
10 #&
11 c = a&b
12 print (c)
13 print (a.intersection(b))
14 
15 #-
16 c = a - b
17 print (c)
18 print (a.difference(b))
19 
20 #^
21 c = a ^ b
22 print (c)
23 a.symmetric_difference(b)
24 
25 
26 print (c.issubset(a))
27 print (c <= a)
28 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大的元素

 

 1 from heapq import *
 2 from random import shuffle
 3 data = list(range(10))
 4 shuffle(data)
 5 heap = []
 6 for n in data:
 7     heappush(heap,n)
 8 
 9 print ('init')
10 print (heap)
11 
12 print ('pop 3 min elements')
13 print (heappop(heap))
14 print (heappop(heap))
15 print (heappop(heap))
16 
17 print ('show')
18 print (heap)
19 
20 print ('pop and push 0.5')
21 heapreplace(heap,0.5)
22 print (heap)

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

3.双端队列

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

 1 from collections import deque
 2 q = deque(range(5))
 3 print (q)
 4 
 5 print ('#q.append(5) q.appendleft(6)')
 6 q.append(5)
 7 q.appendleft(6)
 8 print (q)
 9 
10 print ('#q.pop()')
11 q.pop()
12 print (q)
13 
14 print ('#q.popleft()')
15 q.popleft()
16 print (q)
17 
18 print ('#q.rotate(3)')
19 q.rotate(3)
20 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示例:

随机获取区域内时间

 1 from time import *
 2 from random import *
 3 
 4 date1 = (2008,1,1,0,0,0,-1,-1,-1)
 5 date2 = (2009,1,1,0,0,0,-1,-1,-1)
 6 
 7 time1 = mktime(date1)
 8 time2 = mktime(date2)
 9 random_time = uniform(time1,time2)
10 print (asctime(localtime(random_time)))

 

posted on 2016-06-06 19:59  leihui  阅读(233)  评论(0编辑  收藏  举报