一. time
python处理时间的标准库
1.1 获取现在的时间
time.localtime()
:
获取本地时间
time.gmtime()
:
世界统一时间
time.ctime()
:
返回本地时间的字符串
1.2 时间戳与计时器
time.time()
:
自纪元以来的秒数,纪录sleep
time.perf_counter()
:
随意选取一个时间点,记录现在时间到该时间点的间隔秒数,记录sleep
time.process_time()
:
随意选取一个时间点,记录现在时间到该时间点的间隔秒数,不记录sleep
perf_counter精度比time高一些
1.3 格式化
time.strftime(str,variable)
自定义格式化输出
1.4 程序休眠
time.sleep(second)
单位为秒
二. random
python可以通过random库提供各种伪随机数
2.1 随机种子
seed(a = Node)
:
1. 相同种子会产生相同随机数
2. 如果不设置随机种子,以系统当前时间为默认值
2.2 产生随机整数
2.2.1 randint(a,b)–产生[a,b]之间的随机整数
2.2.2 rangrange(a)–产生[0,a]之间的随机整数
2.2.3 randrange(a,b,step)–产生[a,b)之间以step为步长的随机整数
2.3 产生随机浮点数
2.3.1 random()–产生[0.0,1.0)之间的随机浮点数
2.3.2 uniform(a,b)–产生[a,b]之间的随机浮点数
2.4 序列用函数
2.4.1 choice(seq)–从序列类型中随即返回一个元素
2.4.2 choices(seq,weights-None,k)–对序列类型进行k次重复采样,可设置权重
2.4.3 shuffle(seq)–将序列类型中元素随机排列,返回打乱后的序列
2.4.4 sample(pop,k)–从pop类型中随机选取k个元素,以列表类型返回
2.5 概率分布–以高斯分布为例
2.5.1 gauss(mean,std)–生产一个符合高斯分布的随机数
2.5.2 多生成几个
三. collections
import collections
3.1 namedtuple–具名数组
例如–点的坐标,仅看数据,很难知道表达的是一个点的坐标
p = (1,2)
构建一个新的元组子类
#typename是元组名字,field_names是域名
collections.namedtuple(typename,field_names,*)
import collections
Point_ = collections.namedtuple("Point",['x','y'])
p = Point_(1,2)
print(p.x) #可以调用属性
x,y = p #有元组的性质
print(isinstance(p,tuple)) #确实是元组的子类
扑克牌
Card = collections.namedtuple('Card',['pai','yan'])
pai = [str(n) for n in range(2,11)]+list('JQKA')
yan = 'hei hong mei kuai'.split()
print(pai)
print(yan)
cards = [Card(p,y) for p in pai for y in yan]
cards
3.2 Counter–计数器工具
from collections import Counter
s = '哈哈哈哈你是小明是吧'
Counter(s)
print(isinstance(Counter(),dict)) #是字典的一个子类
iter.most_common(n)
提供n个频率最高的元素和计数
元素展开–elements()
加减操作
c = Counter(a=3,b=1)
d = Counter(a=2,b=1)
c+d
例
from random import sample
cards = collections.Counter(tens=16, low_cards=36)
cards
for i in cards.elements():
print(i)
s = sample(list(cards.elements()), k=10)
print(s)
3.3 deuqe双向队列
- 列表访问数据快速
- 插入和删除操作很慢–通过移动元素实现
from collections import deque
d = deque('abc')
d
d.append('a') #右端添加
d.appendleft('b') #左端添加
d.pop() #右端删除
d.popleft() #左端删除
四. itertools–迭代器
4.1 排列组合迭代器
(1)product–笛卡尔积
import itertools
for i in itertools.product('abc','12')
print(i)
(2)permutations–排列
for i in itertools.permutations('abc',3):#3是排列长度
print(i)
(3)combinations–组合
for i in itertools.combinations('abc',3):#3是组合长度
print(i)
(4)元素可重复组合
for i in itertools.combinations_with_replacement('abc',2):
print(i)
4.2 拉链
(1)zip–短拉链
长度不一时,执行到最短对象
for i in zip('abc','012','xyz'):
print(i)
zip_longest–长拉链
长度不一时,执行到最短对象
缺省元素用None或者指定字符替代 fillvalue=
4.3 无穷迭代器
(1)count(start=0,step=1)
创建一个迭代器,从start开始,返回均匀间隔的值
import itertools
for i in itertools.count(0,1):
print(i)
(2)cycle(iterable)–循环
创建一个迭代器,返回iterable中的所有元素,无限重复
for i in itertools.cycle('abcde'):
print(i)
(3)repeat(object[,times])–重复
创建一个迭代器,不断重复object,除非设定参数times,不然就无限重复
4.4 其他
chain(iterables)–锁链
将一组迭代器串联起来,形成一个更大的迭代器
for i in itertools.chain('abc',[1,2,3])
print(i)
enumerate(iterable,start=0)–枚举
产生两个元素组成的元组,结构是(index,item)
index从start开始,item从iterables开始
group(iterable,key=None)–分组
创建一个迭代器,按照key指定方式,返回iterable中连续的键和组
一般来说,预先对数据进行排序
key默认None,把连续重复元素分组
for key,group in itertools.groupby(a,key=len):
print(key,list(group))
print(type(group))