SICP_Python版本第二章:序列作为约定界面

来源:互联网 发布:珍珠丁子裤淘宝买家秀 编辑:程序博客网 时间:2024/06/05 01:56

reduce,map,filter,[expressionforinsiftest(s)],

比如下面,一行代码就写出fib数列的前n项,然后再过滤求和。

def sum_even_fibs(n):    s = reduce(lambda x,y:x+[x[-1]+x[-2]],[[1,1]]+[0]*(n-2))    return sum([x for x in s if not x%2])

2.34计算多项式

def horner_eval(x,cofficients):    return reduce(lambda y,c:y*x+c,cofficients[::-1])

2.36构造一个accumulate_n过程,用来处理序列的序列 。

def accumulate_n(f,init,sequence):    return [reduce(f,[subs[i] for subs in sequence]) for i in range(len(sequence[0]))]

2.37:几种矩阵运算的实现。

def dot_product(v,w):    return sum([v[i]*w[i] for i in range(len(v))])def maxtrix_vector(m,v):    return [reduce(lambda x,y:x+y,[m[i][j]*v[j] for j in range(len(v))]) for i in range(len(m))]def maxtrix_matrix(m,n):    r = transponse(n)    return [maxtrix_vector(r,m[i]) for i in range(len(m))]def transponse(m):    return [[m[i][j] for i in range(len(m))] for j in range(len(m[0]))]m = [[1,2,3,4],[4,5,6,6],[6,7,8,9]]v = [[1],[2],[3],[4]]print(maxtrix_matrix(m,v))#print(transponse(m))

2.38:应该满足的条件是f(x,y)=f(y,x)

0 0
原创粉丝点击