Попытка создать конечные последовательности чисел в python2: IndexError (новичок) - PullRequest
0 голосов
/ 06 июля 2018

edit: исходная проблема теперь решена, посмотрите внизу вопроса; У меня есть другая проблема.

У меня есть список, 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 ]

0 голосов
/ 06 июля 2018

Вы ссылаетесь на 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])
0 голосов
/ 06 июля 2018

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