Как «индекс списка вне допустимого диапазона»?

Выполнение этого кода показывает: list index out of range.

x= int(input("Enter the row number"))
y= int(input("Enter the column number"))
s= []
for i in range(1,x):
    for j in range(1,y):
        s[i][j]= i*j
    print s

Учтите, что я полный любитель программирования, поэтому не могу помочь себе в основных задачах. Спасибо!

потому что у вас пустой список s=[] sou. Вы не можете запросить i-й элемент, если он не существует.

Take_Care_ 01.05.2018 14:43

Вы использовали тег Python 3, но ваш код использует синтаксис Python 2 print. Что он?

glibdud 01.05.2018 14:44

Я бы рекомендовал изучить раздел списков достойного учебника по Python (пример).

glibdud 01.05.2018 14:47

Это Python3. Спасибо, что указали на это @glibdud

Tapasya.A 01.05.2018 14:47

Фактически, вы можете помочь себе в решении основных задач, если найдете учебное пособие и пройдетесь по нему. Мы не репетиторство.

Ken White 01.05.2018 14:51

@KenWhite Я прошел через учебные пособия, но они не помогают понять суть программы, особенно. когда человек совершенно не знаком с предметом.

Tapasya.A 01.05.2018 14:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
6
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сложность, с которой вы столкнулись, заключается в том, что вы не можете расширить список, назначив несуществующий элемент.

Вы можете делать то, что хотите, используя словарь, например, потому что со словарем вы может изобретаете новые элементы, просто назначая их:

s= {}
for i in range(1,x):
    for j in range(1,y):
        s[i,j]= i*j

Но если вам действительно нужен список списков, вы должны создать каждый список с помощью append(). С x,y == (4,5):

>>> s = []
>>> for i in range(1,x):
        s.append([])
        for j in range(1,y):
            s[-1].append (i*j)

>>> s
[[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12]]

Это не совсем соответствует тому, что пытался сделать ваш исходный код, потому что списки Python начинаются с нуля, и вы хотели, чтобы ваш самый низкий индекс Икс и у был равен 1. Итак

>>> s[2][3]
12

С x,y == (4,5) вы, возможно, ожидали, что эта матрица будет иметь 20 элементов вместо 12. Причина, по которой вы получите 12, состоит в том, что range(1,n) создает последовательность элементов до, но не включаяn.

И если вы действительно программируете на Python 3, вам нужно написать print(s), потому что в Python 3 print - это функция, а не инструкция.

Вы инициализировали свой массив s как пустой, поэтому любое присвоение приведет к ошибке вне допустимого диапазона. Для числовых массивов вы можете использовать следующий подход для его инициализации:

x = int(input("Enter the row number: "))
y = int(input("Enter the column number: "))

s = [[0] * y for _ in range(x)]

for i in range(x):
    for j in range(y):
        s[i][j] = i * j

print s

Например:

Enter the row number: 5
Enter the column number: 3
[[0, 0, 0], [0, 1, 2], [0, 2, 4], [0, 3, 6], [0, 4, 8]]

Примечание. Массивы в Python начинаются с [0][0], поэтому последняя позиция будет s[4][2], которая будет содержать 2 * 4. Вы можете, например, добавить один к x и y, чтобы получить дополнительное измерение.

Это помогло. Большое спасибо.

Tapasya.A 01.05.2018 15:53

Другие вопросы по теме