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

问题描述 投票:0回答:5

我有一个关于将斐波那契序列列入清单的问题,我只是陌生人,请有人帮助我。

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

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

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = b[i], myArray1+myArray2[i]
    print(myArray2)
python list fibonacci
5个回答
10
投票

此代码将前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


5
投票

你可能想要这个:

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]

1
投票

你犯的错误有两种;创造错误和错误的错误会影响可读性

应删除短语[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)

希望有所帮助


0
投票
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

0
投票

您可以使用以下代码,您的问题可以在一行中解决。我们在做什么是追加

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)
© www.soinside.com 2019 - 2024. All rights reserved.