python中lambda函数 list comprehension 和 zip函数使用指南
lambda函数
Python支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做lambda的函数,是从Lisp借用来的,可以用在任何需要函数的地方。
deff(x):returnx*2,用lambda函数来替换可以写成:g=lambdax:x*2`g(3)结果是6.(lambdax:x*2)(3)`也是同样的效果。
这是一个lambda函数,完成同上面普通函数相同的事情。注意这里的简短的语法:在参数列表周围没有括号,而且忽略了return关键字(隐含存在,因为整个函数只有一行)。而且,该函数没有函数名称,但是可以将它赋值给一个变量进行调用
使用lambda函数时甚至不需要将它赋值给一个变量。这可能不是世上最有用的东西,它只是展示了lambda函数只是一个内联函数。
总的来说,lambda函数可以接收任意多个参数(包括可选参数)并且返回单个表达式的值。lambda函数不能包含命令,包含的表达式不能超过一个。不要试图向lambda函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。我将它们用在需要封装特殊的、非重用代码上,避免令我的代码充斥着大量单行函数。
列表推导式(listcomprehension)
看一段简单代码
testList=[1,2,3,4] defmul2(x): printx*2 [mul2(i)foriintestList] [mul2(i)foriintestListifi%2==0]
多维数组初始化
multilist=[[0forcolinrange(5)]forrowinrange(3)]
zip函数
>>>a=[1,2,3] >>>b=[4,5,6] >>>c=[4,5,6,7,8] >>>zipped=zip(a,b) [(1,4),(2,5),(3,6)] >>>zip(a,c) [(1,4),(2,5),(3,6)] >>>zip(*zipped) [(1,2,3),(4,5,6)]
学习资源
学以致用
一
m=[[-1.0,2.0/c-1,-2.0/c+1,1.0], [2.0,-3.0/c+1,3.0/c-2,-1.0], [-1.0,0.0,1.0,0.0], [0.0,1.0/c,0.0,0.0]] multiply=lambdax:x*c m=[[multiply(m[col][row])forcolinrange(4)]forrowinrange(4)] print[[m[col][row]forcolinrange(4)]forrowinrange(4)]
它所作的工作:m是一个包含参数c的矩阵,他计算了c*m的结果
想了一下,最后一句改成
print[[multiply(each)foreachinrow]forrowinm]更加pythonic
二矩阵相乘
学习资源
defmatrixMul(A,B): res=[[0]*len(B[0])foriinrange(len(A))]foriinrange(len(A)): forjinrange(len(B[0])): forkinrange(len(B)): res[i][j]+=A[i][k]*B[k][j]returnres defmatrixMul2(A,B): return[[sum(a*bfora,binzip(a,b))forbinzip(*B)]forainA] a=[[1,2],[3,4],[5,6],[7,8]] b=[[1,2,3,4],[5,6,7,8]] printmatrixMul(a,b)printmatrixMul(b,a)print"-"*90 printmatrixMul2(a,b)printmatrixMul2(b,a)print"-"*90