这两个输出来自哪里? Fibonacci系列使用python列表

问题描述 投票:-1回答:2

如果你不想阅读这篇文章,我已经解释了这个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(根据斐波那契序列,它是正确的)但是如果我们干运行代码,第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]

我无法理解,这两个如何输出。

python python-3.x list while-loop fibonacci
2个回答
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
投票

当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。

© www.soinside.com 2019 - 2024. All rights reserved.