Python一些意外有用的包

最后修改时间:2020/11/27 22:37:25

Python自带的包我分为四种:十分常用大家都知道的(比如time,math),很有用但是知名度没那么高的(比如itertools,collections),专用包(多媒体服务、XML解析)和一些根本没人会用的很难的包。第一个不需要介绍,第三个需要的时候直接找,第四个介绍它边际效应低。在这里记录第二种,一些Python有用的自带的包。这里是全部Python标准库列表

常用的包:

string 中能够列出所有的字符:
>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.hexdigits
'0123456789abcdefABCDEF'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'


collections --- 容器数据类型

这个模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。主要有用的列出这些:

namedtuple()

创建命名元组子类的工厂函数

deque

类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)

ChainMap

类似字典(dict)的容器类,将多个映射集合到一个视图里面

Counter

字典的子类,提供了可哈希对象的计数功能

原本还有一个OrderedDict类,但是python3.7以后普通字典也是有序字典,这个类就没啥用了(虽然还和普通的dict有区别)。

这些中我最有用的是Counter。原本的写法大概是:

>>> d = {}
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: d[word] = d.get(word, 0)+1
>>> d
{'red': 2, 'blue': 3, 'green': 1}

现在更新后:

>>> from collections import *
>>> Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
Counter({'blue': 3, 'red': 2, 'green': 1})
>>> Counter('gallahad')
Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})

还能够进行加减操作:

>>> a = Counter('gallahad')
>>> b = Counter('Love live!')
>>> c = a+b
>>> c
Counter({'a': 3, 'l': 3, 'v': 2, 'e': 2, 'g': 1, 'h': 1, 'd': 1, 'L': 1, 'o': 1, ' ': 1, 'i': 1, '!': 1})
>>> c.most_common(3)
[('a', 3), ('l', 3), ('v', 2)]
>>> c.most_common()[2:5]
[('v', 2), ('e', 2), ('g', 1)]

这就能让我方便地合并字典啦~~


二叉堆heapq和二分查找bisect

没有说明,要用的时候再查。


statistics --- 数学统计函数

一个简单的不想调用scipy或者numpy的时候可以快速使用的数学统计工具。

这些函数用于计算一个总体或样本的平均值或者典型值。

mean()

数据的算术平均数(“平均数”)。

fmean()

快速的,浮点算数平均数。

geometric_mean()

数据的几何平均数

harmonic_mean()

数据的调和均值

median()

数据的中位数(中间值)

median_low()

数据的低中位数

median_high()

数据的高中位数

median_grouped()

分组数据的中位数,即第50个百分点。

mode()

离散的或标称的数据的单个众数(出现最多的值)。

multimode()

离散的或标称的数据的众数列表(出现最多的值)。

quantiles()

将数据以相等的概率分为多个间隔。

这些函数用于计算总体或样本与典型值或平均值的偏离程度。

pstdev()

数据的总体标准差

pvariance()

数据的总体方差

stdev()

数据的样本标准差

variance()

数据的样本方差


functools

除了从python2时代熟知functools.reduce()以外我都不懂。


itertools --- 为高效循环而创建迭代器的函数

十分重要的工具。除了我熟知的全排列和无穷迭代器以外就,以下迭代器可供查询

迭代器实参结果示例
accumulate()p [,func]p0, p0+p1, p0+p1+p2, ...accumulate([1,2,3,4,5]) --> 1 3 6 10 15
chain()p, q, ...p0, p1, ... plast, q0, q1, ...chain('ABC', 'DEF') --> A B C D E F
chain.from_iterable()iterablep0, p1, ... plast, q0, q1, ...chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
compress()data, selectors(d[0] if s[0]), (d[1] if s[1]), ...compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F
dropwhile()pred, seqseq[n], seq[n+1], ... 从pred首次真值测试失败开始dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
filterfalse()pred, seqseq中pred(x)为假值的元素,x是seq中的元素。filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
groupby()iterable[, key]根据key(v)值分组的迭代器 
islice()seq, [start,] stop [, step]seq[start:stop:step]中的元素islice('ABCDEFG', 2, None) --> C D E F G
starmap()func, seqfunc(*seq[0]), func(*seq[1]), ...starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
takewhile()pred, seqseq[0], seq[1], ..., 直到pred真值测试失败takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
tee()it, nit1, it2, ... itn 将一个迭代器拆分为n个迭代器 
zip_longest()p, q, ...(p[0], q[0]), (p[1], q[1]), ...zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-

有趣的函数和不详细介绍的包

候选匹配中(不超过 n 个)的最佳匹配将以列表形式返回,按相似度得分排序,最相似的排在最前面。

>>> import difflib
>>> difflib.get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']

Windows系统相关模块