数学标准库
01.Math库
math.ceil(x)向上取整
math.floor(x)向下取整
math.pi数字π的取值
math.gcd()两个数的最大公约数
math.factorial()求阶乘
02.collections
1.Counter:计数器
①用于计数,看做dict
from collections import Counter
a=["apple","banana","apple","cat","cat","cat","dog"]
b=Counter(a)
print(type(b))
print(b)
②定义方法
Counter(可迭代对象)
from collections import Counter
a=Counter() #空Counter
a=Counter("Hello World") #统计每个字符出现次数
a=Counter([1,2,3,1,2]) #统计每个元素出现次数
Counter(字典)
#利用字典初始化每个元素(key)和出现次数(value)
a=Counter({'a':1,'b':2,'c':3})
a=Counter(a=1,b=2,c=3)
③常用函数
most_common(k):筛选出现频率topk
elements():返回一个迭代器,每个元素重复对应次数
clear():清空
大部分字典的功能均可以使用
数学运算
2.deque:双端队列
①
a=deque([1,2,3,4])
大部分功能与list类似,但是删除和插入操作比list更高效
②特有的功能
a=deque([1,2,3,4,1,4,2,3])
a.rotate(2) #[2,3,1,2,3,4,1,4]
#向右循环移动2步,如果n是负数,就向左循环
3.defaultdict:有默认值的字典
from collections import defaultdict
d=defaultdict(int)
print(d['x'])#0
d=defaultdict(list)
print(d['x'])#[]
d=defaultdict(set)
print(d['x']) #set()
d=defaultdict(dict)
print(d['x']) #{}
4.OrderedDict:有序字典
①与字典相同,key按照插入的顺序排序
②popitem()函数:删除最后一个元素然后返回
OrderedDict:可以指定参数last,last默认为True,删除最后一个,否则删除第一个
from collections import OrderedDict
data=[('a',1),('b',2),('c',3)]
d=OrderedDict(data)
print(d)
while len(d)!=0:
print("删除的元素为:",d.popitem(False))
print(d)
#从首开始删的
③move_to_end(key,last=True)函数:
OrderedDict将key移动到任一端。last=True表示右端,否则为左端。key不存在则报错
from collections import OrderedDict
data=[('a',1),('b',2),('c',3)]
d=OrderedDict(data)d.move_to_end('a')
d.move_to_end('c',False)
03.heapq
堆:完全二叉树,每个节点小于等于子节点(默认为最小堆),每个节点k都有两个字节点2k+1,2k+2.
使用list表示一个堆
1.将无序list 转换成最小堆
heapq.heapify(a)
2.最小堆a中添加元素x:
heapq.heappush(a,x)
3.弹出并返回最小元素
heapq.heappop(a)
4.弹出并返回最小元素,同时添加元素x
heapq.heapreplace(a,x)
04.functool
1.partial:“冻结”某些函数的参数或者关键字参数,然后返回一个函数
2.functools.partial(func,*args,**keywords)
func:需要被扩展的函数,返回的函数其实是一个类的func函数
*args:需要被固定的位置参数
**kwargs:需要被固定的关键字参数
from functools import partial
def Add(a,b,c):
print(a+b+c)
add_fix_c=partial(Add,c=5)
#用关键字固定
add_fix_c(2,3)
05.itertools
一、无限迭代器
1.生成长度为无限的迭代器
2.count(start=0,stp=1):创建一个迭代器,它从start值开始,返回均匀间隔的值
3.cycle(iterable):创建一个迭代器,循环遍历iterable中所有元素
4.repeat(object[,times]):创建一个迭代器,如果没有指定times则无限循环遍历object,否则遍历指定次数。
from itertools import count,cycle,repeat
for x in repeat("hello",100):
print(x)
二、有限迭代器
1.accumulate(iterable[,func]):创建一个迭代器,返回累加汇总值或其他双目运算函数的累计结果值
accumulate([1,2,3,4,5]) 求依次累积的和--->1 3 6 10 15
accumulate([1,2,3,4,5],max) 前面所有的最大值--->1 2 3 4 5
accumulate([1,2,3,4,5],operator.mul) 前面的乘积 --->1 2 6 24 120
from itertools import accumulate
import operator
a=[3,1,2,4,5]
b=list(accumulate(a,operator.mul))
print(b)
2.chain():合并多个迭代器
chain('ABC','DEF')--->A B C D E F
三、排列组合迭代器
1.product(*iterables,repeat=1):可迭代对象的笛卡尔积
- *iterables:表示多个可迭代对象
- repeat:表示这些可迭代序列重复的次数
from itertools import product
ans=list(product([1,2,3],repeat=3))
2.permutations(iterable,r=None):由iterable元素生成的长度为r的排列,如果r未指定或为None,r默认设置为iterable长度
from itertools import permutations
a=list(permutations([1,2,3,4],r=2))
for x in a:
print(x)
3.combinations(iterable,r):返回由输入iterable中元素组成长度为r的子序列
from itertools import permutations,combinations
a=list(combinations([1,2,3,4],r=2))