使用lambda和map或reduce在Python中打印斐波那契数列
- 我想用lambda()函数和map()或reduce()函数在Python中打印斐波那契数列。
注意:我在StackOverflow上搜索过,但只找到了一些关于打印第n个斐波那契数的问题。例如:用Python 3打印斐波那契数的单行代码?
6 个回答
0
这里有一些可能对你有帮助的内容!
使用 reduce()
和 lambda
实现
from functools import reduce
fibonacci_seq = [0, 1]
n = 10
reduce(lambda a, b: len(fibonacci_seq) < n and (fibonacci_seq.append(a+b) or a+b), fibonacci_seq)
(fibonacci_seq.append(a+b) or a+b)
: 这里的 <any_list>.append(ele)
方法会返回 None
,所以我用它来把下一个元素加到 fibonacci_seq
列表里。用 or
把它和 a+b
结合起来,这样可以把 a+b
作为结果返回给 reduce()
函数,让它继续处理下一个序列的元素。
len(fibonacci_seq) < n
: 当列表的长度达到 n 时,它就不再增加了。
输出结果
print(fibonacci_seq)
>>> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
以上的方法从 n = 2 开始返回正确的序列。
0
你可以试试用 reduce() 和 lambda() 来计算斐波那契数列。
def Fib(count):
first =[0,1]
for i in range(0,count-2):
first.append(reduce(lambda x,y : x+y,first[-2:]))
print(first)
Fib(10)
输出结果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
1
代码片段:
fibonacci = lambda number: number if number <= 1 else fibonacci(number - 1) + fibonacci(number - 2);
listOfFibonacciNumbers = list(map(fibonacci, range(0, 20, 1)));
print(listOfFibonacciNumbers);
输出结果:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
在20的位置,你可以输入你自己的数字。希望这对你有帮助:)
2
使用 reduce() 和 lambda() 计算斐波那契数列
from functools import reduce
def fibonacci(count):
sequence = (0, 1)
for _ in range(2, count):
sequence += (reduce(lambda a, b: a + b, sequence[-2:]), )
return sequence[:count]
print(fibonacci(10))
输出结果
(0, 1, 1, 2, 3, 5, 8, 13, 21, 34)
使用 map() 和 lambda() 计算斐波那契数列
def fibonacci(count):
sequence = [0, 1]
any(map(lambda _: sequence.append(sum(sequence[-2:])), range(2, count)))
return sequence[:count]
print(fibonacci(10))
输出结果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
8
我有以下几种可行的解决方案:
A. 使用 lambda() + reduce():
>>> fib = lambda n: reduce(lambda x, _: x+[x[-1]+x[-2]], range(n-2), [0, 1]) >>> fib(10) >>> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
注意:不能使用 x.append(x[-1]+x[-2])。会出现属性错误(不知道为什么)
B. 使用 lambda() + map():(必须使用一个变量来存结果)
>>> result = [0,1] >>> fib = lambda n: map(lambda _: result.append(result[-1] + result[-2]), xrange(n-2)) >>> fib(10) ## Ignore its output ## >>> result ## Stores the result ## >> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]