使用lambda和map或reduce在Python中打印斐波那契数列

3 投票
6 回答
17076 浏览
提问于 2025-04-18 05:17
  • 我想用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]

撰写回答