斐波那契立方体

Cube for Fibonacci

以下代码有问题,看来我遇到了 list 或 int 操作的问题,所以我应该在哪里以及如何进行更改以更正此代码:

cube = lambda x:x**3
def fibonacci(n):
    fb=[0,1]
    for i in range(2,n-1):
        fb.append([fibonacci(i-1)+fibonacci(i-2)])
    return fb
if __name__ == '__main__':
    n = int(input())
    print(list(map(cube, fibonacci(n))))




Error:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-9-761cca8f2b48> in <module>
      7 if __name__ == '__main__':
      8     n = int(input())
----> 9     print(list(map(cube, fibonacci(n))))

<ipython-input-9-761cca8f2b48> in <lambda>(x)
----> 1 cube = lambda x:x**3
      2 def fibonacci(n):
      3     fb=[0,1]
      4     for i in range(2,n-1):
      5         fb.append([fibonacci(i-1)+fibonacci(i-2)])

TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

您可能想要替换

fb.append([fibonacci(i-1)+fibonacci(i-2)])

fb.append(fibonacci(i-1)+fibonacci(i-2))

现在,您正在将一个以标量作为输入的函数映射到一个包含数字(例如 0 和 1)以及列表(例如 [1])的列表。

你应该确定你想要什么 fibonacci() 到 return。看起来您希望它成为 return 列表,因为您将结果传递给 map()。如果是这样,递归调用也会 return 一个列表,这一行真的没有意义:

fb.append([fibonacci(i-1)+fibonacci(i-2)])

因为 fibonacci(i-1)fibonacci(i-2) 也是列表,但看起来您希望此处的加法结果为整数。

由于您在函数中使用循环并有种子列表,因此不需要递归。只需索引到列表 fb:

def fibonacci(n):
    fb=[0,1]
    for i in range(2,n-1):
        fb.append(fb[i-1] + fb[i-2])
    return fb

n = 9
fibonacci(n)
# [0, 1, 1, 2, 3, 5, 8, 13]

这样,您的多维数据集 map() 应该可以工作了。