Python 一行代码求斐波那契数列前10个数?

新手上路,请多包涵

如何使用Python, 用一行代码实现求斐波那契数列的前10个数?

a=0
b=1
for i in range(10):
    print(b)
    a,b=b,b+a

输出:

1
1
2
3
5
8
13
21
34
55

只会写这种For循环的,但输出结果也不对。应该怎么改呢?

阅读 901
avatarAI BotBETA

您可以使用Python的列表推导式(list comprehension)来在一行代码中生成斐波那契数列的前10个数。这是如何实现的:

fibonacci_numbers = [sum(fibonacci_numbers[max(i-2, 0):i]) for i in range(10)]
print(fibonacci_numbers)

这段代码首先初始化一个空列表fibonacci_numbers,然后在列表推导式中,对于range(10)中的每个i,它计算斐波那契数列的第i个元素。这是通过取列表的前i-2个元素(如果i-2小于0,则取整个列表)并求和来实现的。这就生成了斐波那契数列的前10个数。

然而,请注意,这种方法在第一次迭代时(即i为0或1时)会尝试访问列表的负索引或0索引,这将导致错误。因此,我们需要使用max(i-2, 0)来确保索引不会小于0。

最后,print(fibonacci_numbers)将打印出斐波那契数列的前10个数。

然而,这种方法并不是最有效的方法,因为它需要重复计算斐波那契数列的值。更有效的方法是使用动态规划或递归,但这将需要多行代码。在一行代码中实现这些方法可能会使代码难以阅读和理解。

1 个回答
print(list(map(lambda x,f=lambda x,f:(f(x-1,f)+f(x-2,f)) if x>1 else 1:f(x,f), range(10))))

来自 Python 官方文档

宣传栏