首页 > 解决方案 > 尝试在 python2 中创建有限的数字序列:IndexError(初学者)

问题描述

编辑:现在解决了最初的问题,看问题的底部;我还有一个问题。

我有一个列表,s2它的第一个元素 ( s[0]) 是长度为的数字列表n(由用户输入定义),其元素也由用户定义。我想要做的是创建 n-1 个数字序列作为s2. 这些序列中的每一个都是由前一个序列中的顺序元素的减法组成。(右元素 - 左元素)所以第二个序列的长度是 n-1,第三个:n-2 ...并且第 n 个序列的长度(s2[n-1]'s)是 1。

for j in range(1, n):
    for k in range(0,n-j):
        s2[j].append(s2[j-1][k+1] - s2[j-1][k])

但我收到此错误:

Traceback (most recent call last):
  File "[path]", line 9, in <module>
    s2[j].append(s2[j-1][k+1] - s2[j-1][k])
IndexError: list index out of range

你能帮我调试一下吗?

编辑:

n = int(raw_input())
s = raw_input()
s1 = [int(i) for i in s.split(" ")]
s2 = []
s2.append(s1)
for j in range(1, n):
    for k in range(0,n-j):
        s2[j].append(s2[j-1][k+1] - s2[j-1][k])

示例输入:

4
1 2 3 4

ps:你能建议我另一种方法来比这更快地获得第 n 个吗?而不是创建所有这些列表?(即使 n 很大,我也希望它花费不到 1 秒)

标签: pythonpython-2.7listdebuggingindex-error

解决方案


您需要s2在尝试使用每个元素之前对其进行初始化。否则python怎么知道它是什么类型?

for j in range(1, n):
    s2.append(list())
    for k in range(0, n-j):
        s2[j].append(s2[j-1][k+1] - s2[j-1][k])

推荐阅读