【问题标题】:noobie Iterating over list to display seriesnoobie 遍历列表以显示系列
【发布时间】:2020-09-19 11:53:07
【问题描述】:

我正在尝试在这里生成斐波那契数列。不一定要寻找特定于该系列的答案,但为什么我在这里创建的循环不会为输入“0”生成包含多达 20 个值的列表。

到目前为止,我已经尝试在循环内部和之前追加。我得到的结果是[0,1]。除此之外,它似乎没有添加到列表中。

series = []
value = input("Enter an integer: \n")
i = int(value)
series.append(i)
if series[0] == 0:
    series.append(1)
    for i in series[2:20]:
        series[i]=series[i-1]+series[i-2]
        series.append(i)
print(series)

【问题讨论】:

  • Python 不会为列表预先分配空间。因此,for i in series[2:20] 不会在长度为 1 的列表中按预期工作。
  • for i in LIST 迭代 LIST 中包含的值,您的 series[2:20] 将为空,因为 series 只有 2 个值,并且您在一秒钟后切片。在列表范围之外切片会给出空列表。所以你的for 没有执行。

标签: python python-3.x list loops iteration


【解决方案1】:

在完成series.append(1) 之后,您的系列值[0,1] 仅如此series[2:20] == [] 并且您什么都不迭代,什么也不填写。而且您无法访问尚未分配的索引,因此您无法执行series[i] 并且您还没有到达该索引,您只需要附加值

if series[0] == 0:
    series.append(1)
    for i in range(2, 20):
        series.append(series[i - 1] + series[i - 2])
  • series[2:20] 返回 series 的值,从索引 2 包含到 20 排除
  • range(2,20) 生成值 2 包含到 20 排除

【讨论】:

  • 太棒了!这有帮助。为什么使用 range(a,b) 而不是 list[a:b]?
  • @Tom 我已经在帖子中添加了这个。一个检索值,另一个生成数字
猜你喜欢
  • 1970-01-01
  • 2016-08-08
  • 2018-10-20
  • 2023-03-18
  • 1970-01-01
  • 2021-10-08
  • 2010-12-18
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多