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秒的时间)
答案 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])