Попытка создать конечные последовательности чисел в 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: Можете ли вы предложить мне другой способ, чтобы получить nth быстрее, чем этот? вместо создания всех этих списков? (Я хочу, чтобы это заняло менее 1 секунды, даже если n очень большое)

2 ответа

Вам нужно инициализировать каждый 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])

Вы имеете в виду 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])
Другие вопросы по тегам