Python Поиск соседних элементов в матрице, некорректный вывод
Новичок, делаю первые шаги в программировании. Задача: получить на выводе соседние элементы в матрице по заданным координатам. Написал такой код:
li = []
m = int(input('m'))
n = int(input('n'))
i = int(input('i'))
j = int(input('j'))
for i in range(0, m):
ele = list(map(int, input().split()))
li.append(ele)
def get_adjacent_indices(i, j, m, n):
n_list = []
if i > 0:
n_list.append((li[i-1][j]))
if i + 1 < m:
n_list.append((li[i+1][j]))
if j > 0:
n_list.append((li[i][j-1]))
if j + 1 < n:
n_list.append((li[i][j+1]))
return sorted(n_list)
print(get_adjacent_indices(i, j, m, n))
Код работает исправно, если список с вложенными списками заранее объявить в переменной li, если же использовать ввод, то результат будто смещается, и получаю неверный результат. Например, при li = [[1, 2, 3], [0, 2, 6], [8, 4, 2], [3, 7, 1]] правильный вывод будет [2, 2, 7, 8], если использовать ввод, то [1, 3, 4]. Почему так происходит? Как исправить код?
Ответы (1 шт):
уф - нашел ваше ошибку!!!
def get_adjacent_indices(i, j, m, n):
print(i, j, m, n) # посмотрим, что на вход получает функция
и смотрим что выводится - 2 1 4 3 если использовать подготовленные данные и 3 1 4 3 - если вводить с клавиатуры
а дело все в цикле
for i in range(0, m):
который тоже использует i и эта i потом идет на вызов функции
print(get_adjacent_indices(i, j, m, n)
но значение этой i уже не то, которое вводилось пользователем, а то которое она получила на последнем этапе цикла for i in range(0, m):, т.е. m
используйте другую переменную или вообще так:
for _ in range(0, m):
ele = list(map(int, input().split()))
li.append(ele)
и все заработает
P.S.
li кстати можно и в 1 строчку было бы определить:
li = [list(map(int, input().split())) for _ in range(m)]