繁体   English   中英

在 PYTHON 中使用列表的斐波那契数列?

[英]Fibonacci sequence using list in PYTHON?

我有一个关于将斐波那契数列添加到列表中的问题,我是 python 的新手,请帮助我。

这是我的代码。 我知道这看起来不对,因为它说语法无效。 我真的不知道该怎么办:(

此代码适用于不使用列表的普通代码!

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = b[i], myArray1+myArray2[i]
    print(myArray2)

此代码将前 700 个斐波那契数列放入列表中。 使用有意义的变量名有助于提高可读性!

fibonacci_numbers = [0, 1]
for i in range(2,700):
    fibonacci_numbers.append(fibonacci_numbers[i-1]+fibonacci_numbers[i-2])

注意:如果您使用 Python < 3,请使用xrange而不是range

你可能想要这个:

In [77]: a = 0
    ...: b = 1
    ...: while b < 700:
    ...:     a, b = b, a+b
    ...:     print a, b
1 1
1 2
2 3
3 5
5 8
8 13
13 21
21 34
34 55
55 89
89 144
144 233
233 377
377 610
610 987

如果要将结果存储在列表中,请使用list.append

In [81]: a = 0
    ...: b = 1
    ...: fibo=[a, b]
    ...: while b < 70:
    ...:     a, b = b, a+b
    ...:     fibo.append(b)
    ...: print fibo
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

你犯了两种错误; 造成错误的错误和影响可读性的错误

应该删除短语 [i] 的两个实例。 我相信您可能认为它与迭代或元组有关,但这是您收到错误的部分原因:

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = b, myArray1+myArray2
    print(myArray2)

您收到错误的另一部分原因是变量 b。 你不声明它,它不属于。 如果您使用 myArray2 切换出 b,此代码将正确迭代:

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = myArray2, myArray1+myArray2
    print(myArray2)

然后还有一些易读性问题。 我会将短语 myArray1 和 2 分别更改为 a 和 b。 首先是因为它太长了; 第二,因为在 python 中它被称为列表,而不是数组; 第三,因为您指的是整数,而不是列表或数组:

a = [0] 
b = [1]

while b < 700:
    a, b = b, a+b
    print(b)

然后,变量是 myArray1 和 2,但现在是 a 和 b; 这些是整数,它们不需要表示为单个对象列表。 所以去掉它们周围的括号:

a = 0 
b = 1

while b < 700:
    a, b = b, a+b
    print(b)

然后,此代码中的最后一个短语是 print(b)。 如果你让它打印 b 那么你得到的斐波那契数列缺少它的第一个 1。它会读取(当然在不同的行)1,2,3,5,8,13 等等。 它应该是 1,1,2,3,5,8,13。 您缺少第一个 1。因此需要将 print(b) 更改为 print(a):

a = 0 
b = 1

while b < 700:
    a, b = b, a+b
    print(a)

然后,如果你要表达多个变量,你可以列出所有由逗号分隔的变量,等于所有由逗号分隔的值,如下所示:

a,b,c,d = 1,2,3,4

所以对于您的代码将转换为:

a,b = 0,1

while b < 700:
    a, b = b, a+b
    print(a)

然后摆脱那些额外的空间,空白在python中意味着一些东西,尽管在这里它并没有真正的区别:

a,b = 0,1
while b < 700:
    a, b = b, a+b
    print(a)

所以到目前为止所有这些已经足以让你解决你的原始问题:你正在得到一个迭代(每个连续的值在单独的行上)。 下面是如何获得任意数字 n 的列表:

def fibo(n):
    fibo_list = []
    a,b = 0,1
    while b < n:
        a,b = b,a+b
        fibo_list.append(a)
    print(fibo_list)

希望有帮助

def fibonacci(n, results):
if n == 0:   
    return 0  
elif n == 1:  
    return 1  
else :  
    f = fibonacci(n-1, results) + fibonacci(n-2, results)
    f1 = f[:]
    results.appned(f1)


    return results

您可以使用以下代码,您的问题只需一行即可解决。 我们正在做的是附加

fib_nums

直到你给定的限制,即

700

然后添加

fib_nums

使用第二个长度为零的列表,我们明确地这样做,因为它包含

没有任何

值,我们不需要。

#defining variable
fib_nums = [0, 1] 

#just one line code
fib_nums = fib_nums + [fib_nums.append(fib_nums[i-1]+fib_nums[i-2]) for i in range(2,700)]*0

#printing the series
print (fib_nums)

它并不快,但也能正常工作:

def fibonacci(n):
# return a list of fibonacci numbers
if n == 0:
    fibonacci_list = []
elif n == 1:
    fibonacci_list = [0]
elif n == 2:
    fibonacci_list = [0, 1]
elif n > 2:
    fibonacci_list = [0, 1]
    for i in range(n-2):
        fibonacci_list += [0]
        fibonacci_list[-1] = fibonacci_list[-2] + fibonacci_list[-3]
return fibonacci_list
def fibonacci(number: int) -> int:
    """
    >>> fibonacci(0)
    0
    >>> fibonacci(1)
    1
    >>> fibonacci(2)
    1
    >>> fibonacci(3)
    2
    >>> fibonacci(4)
    3
    >>> fibonacci(5)
    5
    >>> fibonacci(6)
    8
    >>> fibonacci(7)
    13
    >>> fibonacci(8)
    21
    """
    fibs = [0] * (number + 2)
    fibs[0] = 0
    fibs[1] = 1
    for i in range(2, number + 1):
        fibs[i] = fibs[i - 1] + fibs[i - 2]
    return fibs[number]


if __name__ == "__main__":
    from doctest import testmod

    testmod()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM