math
import math
math.sin(0.5) #求0.5的正弦
math.pow(x, y) # x 的 y 次幂
math.sqrt(x) #x 的算术平方根,也就是正数的平方根
calendar
闰年判断
>>> calendar.isleap(2016)
True
>>> calendar.isleap(2015)
False
itertools
cycle()
无限迭代器 cycle('ABCD') --> A B C D A B C D ...
>>> import itertools
>>> x = 'Private Key'
>>> y = itertools.cycle(x) #循环遍历序列中的元素
>>> for i in range(20):
print(next(y), end=',')
P,r,i,v,a,t,e, ,K,e,y,P,r,i,v,a,t,e, ,K,
>>> for i in range(5):
print(next(y), end=',')
e,y,P,r,i,
根据一个序列的值对另一个序列进行过滤的函数compress()
>>> x = range(1, 20)
>>> y = (1,0)*9+(1,)
>>> y
(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
>>> list(itertools.compress(x, y)) #根据一个序列的值对另一个序列进行过滤
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
根据函数返回值对序列进行分组的函数groupby()
groupby(iterable[, keyfunc]) 按照keyfunc函数对序列每个元素执行后的结果分组(每个分组是一个迭代器), 返回这些分组的迭代器
>>> def group(v):
if v>10:
return 'greater than 10'
elif v<5:
return 'less than 5'
else:
return 'between 5 and 10'
>>> x = range(20)
>>> y = itertools.groupby(x, group) #根据函数返回值对序列元素进行分组
>>> for k, v in y:
print(k, ':', list(v))
less than 5 : [0, 1, 2, 3, 4]
between 5 and 10 : [5, 6, 7, 8, 9, 10]
greater than 10 : [11, 12, 13, 14, 15, 16, 17, 18, 19]
chain()接受一个可迭代对象列表作为输入,并返回一个迭代器,有效的屏蔽掉在多个容器中迭代细节。
>>> from itertools import chain
>>> a = [1, 2, 3, 4]
>>> b = ['x', 'y', 'z']
>>> for x in chain(a, b):
... print(x)
...
1
2
3
4
x
y
z
>>>
使用 chain() 的一个常见场景是当你想对不同的集合中所有元素执行某些操作的时候。
比如:
# Various working sets of items
active_items = set()
inactive_items = set()
# Iterate over all items
for item in chain(active_items, inactive_items):
# Process item
这种解决方案要比使用两个单独的循环更加优雅!