Обращение к элементу двухмерного списка: index error

Хочу обратиться к элементу двумерного списка, а тут IndexError: list index out of range, хотя в другом коде аналогичная конструкция работает

a,b=map(int,input().split())
d=[]
e=0
f=0
g=0
h=0
j=0
def split(c):
    return[char for char in c]
for i in range(a):
    c=str(input())
    d.append(split(c))
for x in range(a):
    for y in range(b):
        if d[x][y]=='S':
            e=e+1
    if e==0:
        f=f+1
        d.remove(d[x])
    e=0
b=b-f
h=h+f*a
for y in range(b):
    for x in range(a):
        if d[y][x]=='S':
            j=j+1
    if j==0:
        g=g+1
        d.remove(d[y])
    j=0
h=h+g*a
print(h)

Выходит ошибка:

if d[x][y]=='S':
IndexError: list index out of range

Не понимаю, почему, ведь d - это двумерный список, по двум индексам x и y должна быть возможность обращаться к элементу списка. Ведь следующий код с вводом с клавиатуры аналогичного списка работает:

a,b=map(int,input().split())
d=[]
def split(c):
    return[char for char in c]
for i in range(a):
    c=str(input())
    d.append(split(c))
print(d) 

Ввожу это:

3 4
S...
....
..S.

И вывод верный:

[['S', '.', '.', '.'], ['.', '.', '.', '.'], ['.', '.', 'S', '.']]

Подскажите, пожалуйста, почему такая ошибка выходит в первом коде (в начале вопроса)? Ввод двумерного списка с клавиатуры вроде как корректный, о чём говорит работа второго кода, но в полном коде, который должен исполнять нужную мне функцию, ошибка.


Ответы (1 шт):

Автор решения: ganz

Прочитал лишь заголовок... и так прежде чем, обратится к элементу списка, нужно вывести его размер, то же относительно субсписко-субэлементов

l=[[1,2],[3,4]]
print(len(l))
#2
#значит что можно обратится лишь к элементу на еденицу меньше, так как отсчёт с нуля, грубо говоря реальный нулевой индекс, наш счёт один
l[0]
#[1,2]
#то же самое относится и к подспискам, прежде чем обращаться к индексу нужно узнать его длину
l[0][0]
#1

часто встречаются ошибки со счётчиком, у которого не верно заданы границы

l=[1,2]
for it in range(1,2): #in range(1,len(l))
   print(l[it]) #ошибка тк Л не имеет элемента с индексом два, но его длина два элементу

Вывод всех задействованых переменных перед строкой с ошибкой помогает понять причину ошибки, модуль IC несколько помагает в этом

→ Ссылка