使用lambda打印Fibonacci系列并在python中使用map或reduce

时间:2014-05-04 05:40:22

标签: python python-2.7 python-3.x lambda

  • 我希望使用lambda()函数打印Fibonacci系列,并在Python中使用 map()或reduce()函数。

注意:我确实搜索了SO,但只能找到与打印nth Fibonacci数相关的问题。例如Fibonacci numbers, with an one-liner in Python 3?

6 个答案:

答案 0 :(得分:5)

我有以下工作解决方案:

一个。使用 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])。给出AttributeError(不知道为什么)

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]

答案 1 :(得分:1)

斐波那契使用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]

答案 2 :(得分: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而不是20。 希望对您有所帮助:)

答案 3 :(得分: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] 

答案 4 :(得分: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_seqora+b 结合允许将 a+b 作为结果返回给 reduce() 函数,以使用序列中的下一个元素对其进行操作。

len(fibonacci_seq) < n :一旦 len(list) 达到 n,列表就会停止增长。

输出

print(fibonacci_seq)

>>> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 

上述方法返回 n = 2 以后的正确序列。

答案 5 :(得分:-1)

尝试使用LAMBDA打印前10个Fibonacci数字的代码

fib = lambda n:n,如果n <= 1,则为fib(n-1)+ fib(n-2)

对于范围(10)中的i,

:print(fib(i))