@aab137

Как определить соседей в двумерном списке?

Есть квадратная матрица, например,
[[4,3,5],
 [2,8,6],
 [0,7,9]]

Нужно получить список соседей для каждой "клетки", например, для данной матрицы он будет таким:
[[2,8,3], [4,2,8,6,5], [3,8,6], [4,3,8,7,0], [4,3,5,6,9,7,0,2], и т.д.]

Хотелось бы сделать это максимально быстрым способом
  • Вопрос задан
  • 633 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
def neighbors(x):
    def in_bounds(i, j, x):
        return 0 <= i < len(x) and 0 <= j < len(x[0])

    return [[x[i + di][j + dj] for di in (-1, 0, 1)
                               for dj in (-1, 0, 1)
                               if in_bounds(i + di, j + dj, x) and (di != 0 or dj != 0)]
            for i in range(len(x))
            for j in range(len(x[0]))]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Делайте линейный массив (бит-блок) и вычисляйте с помощью целочисленного деления и остатка с нужным приращением (+/- 1).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы