您的位置:首页 > 编程语言 > Python开发

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

2016-07-17 18:59 302 查看

利用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)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: