![](/img/trans.png)
[英]Print Fibonacci Series using lambda and map or reduce in python
[英]Python program to print fibonacci series using lambda function in Python
我在网上找到了这个代码,但不确定“任何”在那里做什么!?
def fibonacci(count):
fib_list = [0, 1]
any(map(lambda _: fib_list.append(sum(fib_list[-2:])),
range(2, count)))
return fib_list[:count]
print(fibonacci(20))
本质上, any
函数将不断循环遍历可迭代输入,直到某个值为真。 输入是 map 的结果,它永远不会为 True,因为 fib_list.append 总是 None。
如果您想查看代码,您只需元组或列出并打印地图值:
def fibonacci(count):
fib_list = [0, 1]
print(tuple(map(lambda _: fib_list.append(sum(fib_list[-2:])),range(2, count))))
return fib_list[:count]
print(fibonacci(20))
#output
(None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
如果需要,您可以跳过any
并将其替换为元组或列表
链接到any
文档https://docs.python.org/3/library/functions.html?highlight=any#any
any() 函数强制 lambda 遍历迭代器的每个元素。 在没有 for 循环语句的情况下进行循环有点麻烦。
为了更简洁的方法,您可以使用递归并提供起始值约定作为参数 (0,1: 现代) 或 (1,1: 古代):
fibo = lambda n,a,b: [a]+fibo(n-1,b,a+b) if n>1 else [a]
输出:
print(*fibo(10,0,1))
0 1 1 2 3 5 8 13 21 34
print(*fibo(10,1,1))
1 1 2 3 5 8 13 21 34 55
如果不想使用递归,可以将其设为列表推导式:
fibo = lambda n: [ab.append(sum(ab)) or ab.pop(0)
for ab in [[0,1]] for _ in range(n)]
print(*fibo(10))
0 1 1 2 3 5 8 13 21 34
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.