这2从何而来?使用python列表的斐波那契数列

时间:2018-08-30 12:15:25

标签: python python-3.x list while-loop fibonacci

如果您不想阅读本文,我已经在此Youtube视频中解释了问题: https://youtu.be/Ekkkgjf0F_s

以下是我正在使用python生成 Fibonacci系列的代码 列表。

list1 = [0, 1]
x=1
while x <=2:
    length = len(list1)
    first =list1[length-2]
    second =list1[length-1]
    third = first + second
    list1.append(third)
    x+=1
    print list1

当while循环运行第一次迭代时,它将生成系列中即将出现的元素,并将其确切存储在列表中。 该列表现在将变为:

list1 = [0,1,1]

但是让我感到困惑的是,当第二个迭代是由while循环进行时。 如果空运行该代码,您将看到该代码正在输出2(根据fibonacci系列序列,是正确的) 但是如果我们空运行代码,则第4个元素应为3而不是2

第二次互动,长度= 3 >> 在下面空跑

 3-2=1
    3-1=2
    1+2=3
    list1 should be: [0,1,1,3]

但是我得到的输出为:        list1=[0,1,1,2]

我不明白,这2是如何输出的。

2 个答案:

答案 0 :(得分:1)

您的列表的len()为3,因此您的算法将元素1和2(均为1)加在一起。这就是为什么您要退回2的原因。

编辑:这就是斐波那契数列的运行方式。...

带有注释的代码如下:

length = len(list1)       #3
first =list1[length-2]    #list on index 1 is value 1
second =list1[length-1]   #list on index 2 is value 1
third = first + second    # 1+1 = 2
list1.append(third)       # 2 is appended
x+=1
print list1

您可能将列表索引[1]上的值与列表3和1的len之间的实际差异混淆了。

答案 1 :(得分:1)

当list1变为[0,1,1]时,list1的len为3。

现在尝试运行以下内容:

length = len(list1) = 3
first = list1[length-2] = list1[3-2] = list1[1] = 1
second = list1[length-1] = list1[3-1] = list1[2] = 1
third = first + second = 1 + 1 = 2

因此,它会将2加到列表中。