繁体   English   中英

使用 Python 中的 lambda 函数打印斐波那契数列的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM