Python2 - IndexError: создание массива массивов - PullRequest
0 голосов
/ 06 июля 2018

Ну, это часть моего сценария:

k = int(raw_input())
order = []
o = []
for i in range(1, k):
    o.append(raw_input())
    order.append([int(n) for n in list(o[i])])

и после этих строк ввода я получаю следующую ошибку:

3
241356789



 Traceback (most recent call last):
  File "[path]", line 11, in <module>
    order.append([int(n) for n in list(o[i])])
IndexError: list index out of range

Но я просто не могу понять, почему. Кто-нибудь может мне помочь, пожалуйста? (Я новичок)

Ответы [ 5 ]

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

Итак, range(1, k) (в Python 2) дает вам список [1, 2, 3, ..., k-1]. Когда вы добавляете список o чем-то из ввода, элемент доступен по индексу 0

>> o = []
>> o.append(42)
>> o[0]
42

Но в вашем цикле вы пытаетесь получить индекс 1, который недоступен.

Помните, что первый элемент в списке доступен через индекс 0, где второй имеет индекс 1 и т. Д.

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

Слегка поставьте: for i in range(0, k): вместо for i in range(1, k):, чтобы начать с начала, который является 0-м индексом.

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

Индекс i начинается с 1 (диапазон (1, k)), но индекс o начинается с 0. Вы можете использовать o [-1] для доступа к последнему элементу. Или измените цикл for на for i in range(k)

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

Удалить «1» из for i in range(1, k): у меня все работало нормально с линией for i in range(k): вы можете сделать это для того, чтобы сделать на один цикл меньше for i in range(k-1):

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

Python имеет индексирование на основе 0. Поскольку вы фактически начинаете свой цикл с 1 вместо нуля, первый вызов превысит существующий список (который на данный момент имеет длину только 0).

Просто изменив свою линию на

for i in range(0,k):

исправил проблему для меня.

...