斐波那契数列
思路:1.将相应位置上的数值先求出来,2.利用map计算出数列
1 2 3 4 5 6 7 8 9 10 11
| def f(n): if n == 0: return 0 elif n == 1: return 1 else: return f(n-2)+f(n-1) if __name__ == "__main__":
print map(f, range(1,11))
|
打印结果
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
n!+(n-1)! + … + 2!+1!
思路:1. 先写出求阶乘的函数,2.再用reduce求和
先写求阶乘的函数:
1 2 3 4 5
|
def factorial(n):
return reduce(lambda x,y:x*y, range(1,n+1))
|
再用reduce求和
1 2 3 4 5 6
| def fact_sum(n): return reduce(lambda x,y:x+y, map(factorial, range(1,n+1)))
|
将这两个函数合在一起表示:
1 2
| print reduce(lambda x,y:x+y, map(lambda n:reduce(lambda x,y:x*y, range(1,n+1)), range(1,10+1)))
|
用到函数式编程,代码量确实精简了许多。很显然,这一行代码的可读性很差,所以一般情况下,函数式编程需要用得教合理为宜。
计算(a,b)之间的质数
思路:1.先写出算质数的函数,2.用filter方法将符合的质数筛选出来。
求质数:
1 2 3 4 5 6 7 8 9 10 11 12
| def prime(n):
j = not [n%k for k in range(2,n/2+1) if not n%k] return j
|
使用filter将某个区间符合条件的质数筛选出来
1 2
| def is_prime(a,b): filter(prime, range(a,b+1)))
|
一句话表示:
1 2
| print(filter(lambda x:not [x%i for i in range(2,x/2+1) if not x%i], range(1000,1100+1)))
|