@mmerkulov0

Python. Проверить находится ли элемент a с b рядом в многомерном списке (матрице)?

Есть матрица вида:
[[1,2,3],
[5,1,4,7,7],
[0,55,7]]

То есть она состоит из вложенных списков с числами. Нужно проверить находится ли элемент A рядом с элементом B. A рядом с B, если B находится справа или слева от него, либо сверху/снизу или по диагонали от него.
Например, в матрице:
[[1,2,3],
[4,5,6,7,8],
[9,10,11]]
Элемент 2 рядом с 5, 7 рядом с 10 (тк по диагонали) и т.д.
  • Вопрос задан
  • 599 просмотров
Решения вопроса 1
adugin
@adugin Куратор тега Python
Например, так:
import numpy as np
from itertools import zip_longest

lst = [[1, 2, 3], [4, 5, 6, 7, 8], [9, 10, 11]]

def neighbors(a, b, m=lst, r=1):
    m = np.array(list(zip_longest(*m)))#.T
    v = np.argwhere(m == b) - np.argwhere(m == a)
    return np.abs(v).max() <= r

assert neighbors(1, 2) == True
assert neighbors(1, 6) == False
assert neighbors(5, 6) == True
assert neighbors(3, 6) == True
assert neighbors(7, 11) == True
assert neighbors(1, 9) == False
assert neighbors(7, 8) == True
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@o5a
Если оба индекса А не отличаются от индексов B более, чем на 1.
Хотя я не понял, каким именно образом считаете "диагональ" с учетом неравной длины строк.
Ответ написан
Комментировать
@Ignatiy2
def func(arr, a, b):	
	for elem1 in range(len(arr)):
		for elem2 in range(len(arr[elem1])):
			if arr[elem1][elem2] == a:
				onePositionA = arr.index(arr[elem1])
				twoPositionA = arr[elem1].index(arr[elem1][elem2])
			elif arr[elem1][elem2] == b:
				onePositionB = arr.index(arr[elem1])
				twoPositionB = arr[elem1].index(arr[elem1][elem2])

	if abs(onePositionA - onePositionB) <= 1 and abs(twoPositionA - twoPositionB) <= 1:
		return True
	else:
		return False
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы