尝试在python2中创建数字的finit序列:IndexError(初学者)

时间:2018-07-06 11:34:21

标签: python python-2.7 list debugging index-error

edit:最初的问题现在已经解决,请看问题的底部;我还有另一个问题。

我有一个列表,s2的第一个元素(s[0])是长度为n(由用户输入定义)的数字列表,并且还定义了它的元素由用户。我想做的是再创建n-1个数字序列,作为s2的其他元素。这些序列中的每个序列都减去前一个序列中的顺序元素。 (右侧元素-左侧元素),因此第二个序列的长度为n-1,第三个序列的长度为n-2 ...,第n个序列的长度(s2[n-1]的长度)为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秒的时间)

2 个答案:

答案 0 :(得分:0)

您需要先初始化每个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])

答案 1 :(得分:0)

您指的是s2[j],但尚未创建。试试这样的东西

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