Попытка создать конечные последовательности чисел в 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])