В понедельник мы дали вам задачу создать алгоритм для сортировки двухмерного массива по спирали. Надеемся, что вы справились.
Давайте теперь посмотрим на один из вариантов решения и оценим его:
def snail(array):
# Если массив не пустой (база рекурсии)
if array:
# Извлекаем первую строку и приводим её к списку.
# Эта строка будет первой в итоговой последовательности.
top_row = list(array[0])
# Обрабатываем оставшуюся часть матрицы:
# 1. array[1:] — все строки кроме первой.
# 2. zip(*array[1:]) — функция zip с распаковкой строк превращает колонки в строки,
# получая "транспонированный" вариант оставшейся матрицы, где каждая новая строка
# представляет собой столбец исходной матрицы.
rotated_array = zip(*array[1:])
# Преобразуем объект zip в список, чтобы иметь возможность применять индексирование и разворот.
rotated_array = list(rotated_array)
# Инвертируем порядок строк (reverse):
# Так мы меняем направление обхода так, что столбец, ранее располагавшийся справа,
# становится следующей строкой при обходе.
rotated_array = rotated_array[::-1]
# Выполняем рекурсивный вызов:
# Объединяем ранее полученную верхнюю строку (top_row) с результатом обхода оставшейся (повёрнутой) матрицы.
return top_row + snail(rotated_array)
else:
# База рекурсии: если массив пустой, возвращаем пустой список.
return []
А как решили вы? 💬