from collections import defaultdict, namedtuple
from functools import reduce
from itertools import product
from operator import mul, itemgetter
namedtuple: 这个跟java中的类相似
factor_model = namedtuple('factor_model',['index_pre', 'index_aft'])
f = factor_model(0,3)
print(f.index_pre)
print(f.index_aft) //0 3
这里namedtuple('namedtuple的名字',[定义元素1,定义元素2])
defaultdict: 与普通dict最大的不同是当在dict查询不存在的key时,不会报错,而是返回对应的数值。而defaultdict允许一个key能对 应多个value
factor_model = namedtuple('factor_model',['index_pre', 'index_aft'])
f = factor_model(0,3)
f1 = factor_model(2,4)
f2 = factor_model(0,5)
f3 = factor_model(2,6)
print(f.index_pre)
print(f.index_aft)
# defaultdict
d = defaultdict(set)
d[f.index_pre].add(f.index_aft)
d[f1.index_pre].add(f1.index_aft)
d[f2.index_pre].add(f2.index_aft)
d[f3.index_pre].add(f3.index_aft)
print(d) //output --- defaultdict(<class 'set'>, {0: {3, 5}, 2: {4, 6}})
遇到相同key时可以凑在一起
lamda:
lamda相当于定义了一个函数,只是写法简洁一点
e.g mul = lamda x,y: x * y
mul(2,3) ----->6相当于把x*y当成一个函数丢给了mul,mul就成为了乘法函数
reduce:
reduce有三个参数(第一个为二元的运算函数,第二个为list, tuple, string之类的迭代,初始运算值)第三个为可选函数
就相当于一个叠加运算的方法
def add(x,y):
return x+y
red = reduce(add, [1,2,3,4]) // output ---- (((1+2)+3)+4) -----10
可以简化为:
red = reduce(lamda x,y: x+y , [1,2,3,4])
# reduce
red = reduce(lambda x,y:x+y,[[1,2,3]],[2])----output -- [2,1,2,3] 初始值为[2]
这里有个问题搞不懂吗,待日后搞懂(x为初始值)
red = reduce(lambda x,y:y.append(x),[[1,2,3]],[2])----output -- None
product:
e.g a = product((0,1), repeat = 3)
print(list(a))----->[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
itertools.accumulate:累计
a = [4,5,6,7]
x = accumulate(a)
print(list(x))------output [4, 9, 15, 22]
mul:
这个貌似就是乘法mul(2,3) --> 6
a =(1,3)
b=(2,4)
list(map(mul,a,b))-----(2,12)
itemgetter:
这个可以获取数组元素
a = [[1,2],[3,4]]
b = itemgetter(1)获取index为1的值
print(b(a)) ----[3,4]