• 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)))
  • 相关阅读:
    Golang-字符串常用的系统函数
    35.HTML--网页自动跳转 5种方法
    34.js----JS 开发者必须知道的十个 ES6 新特性
    33. 禁止鼠标右键保存图片、禁止拖动图片
    32.js 判断当前页面是否被浏览
    31.JS实现控制HTML5背景音乐播放暂停
    30.get和post的区别
    29.html5 移动端开发总结
    28.json数组,select选择,input输出对应数据
    27.给input边框和背景颜色设置全透明
  • 原文地址:https://www.cnblogs.com/leihui/p/5564921.html
Copyright © 2020-2023  润新知