Программа курса:
Разбор задачи: Преобразование 1D Массива В 2D Массив
Предложенный нами код решения:
def construct2DArray(original, m, n):
"""
Создаёт 2D массив размером m x n из 1D массива original.
:param original: Список целых чисел
:param m: Количество строк в 2D массиве
:param n: Количество столбцов в 2D массиве
:return: 2D массив размером m x n, либо пустой массив, если размеры несовместимы
"""
if len(original) != m * n:
return []
return [original[i:i + n] for i in range(0, len(original), n)]
1. Начальная проверка размеров:
if len(original) != m * n:
return []
Мы начинаем с проверки, можно ли вообще преобразовать одномерный массив в двумерный, соответствующий заданным параметрам m (количество строк) и n (количество столбцов).
Объяснение: Если количество элементов в одномерном массиве
originalне соответствует произведению количества строк и столбцов (m * n), то возвращаем пустой список. Это делает дальнейшую обработку невозможной, так как количество элементов в массиве не совпадает с требуемым размером двумерного массива.Пример:
- Если у нас есть массив
[1, 2, 3, 4, 5, 6], и мы хотим создать двумерный массив размером2x3(2 строки и 3 столбца), то условие проверкиlen(original) != m * nбудет истинным, так какlen(original) = 6иm * n = 6, и это число подходит.
- Если у нас есть массив
2. Создание двумерного массива:
return [original[i:i + n] for i in range(0, len(original), n)]
После того, как мы убедились, что можно создать двумерный массив, начинается сам процесс его формирования.
- Объяснение: Здесь используется генератор списка для создания строк двумерного массива. Мы берем срезы исходного массива, чтобы каждый срез стал новой строкой двумерного массива.
Генератор работает так:
i- индекс, который мы начинаем с 0 и увеличиваем с шагомn, что позволяет извлекать последовательности элементов длинойn.original[i:i + n]- это срез массива от индексаiдо индексаi + n, который создает строку изnэлементов. Для каждого среза получается новая строка в двумерном массиве.
Пример:
- Для массива
[1, 2, 3, 4, 5, 6]и параметровm = 2иn = 3, генератор будет работать следующим образом:- Первый срез:
original[0:3]— это[1, 2, 3] - Второй срез:
original[3:6]— это[4, 5, 6]
- Первый срез:
В результате мы получим двумерный массив
[[1, 2, 3], [4, 5, 6]].
3. Возврат результата:
return [original[i:i + n] for i in range(0, len(original), n)]
Этот список срезов является нашим двумерным массивом, который мы возвращаем в случае успешного выполнения условия проверки. В случае, если длина массива original не соответствует требуемым размерам, вернется пустой массив.
Пример с объяснением:
Входные данные:
original = [1, 2, 3, 4], m = 2, n = 2
Шаг 1: Проверка длины
len(original) = 4, иm * n = 2 * 2 = 4, условие не нарушается, можно создавать двумерный массив.
Шаг 2: Создание двумерного массива
- Генератор создаст два среза:
original[0:2]— это[1, 2]original[2:4]— это[3, 4]
- Возвращаем результат:
[[1, 2], [3, 4]]
Входные данные:
original = [1, 2, 3], m = 2, n = 2
Шаг 1: Проверка длины
len(original) = 3, иm * n = 2 * 2 = 4, условие нарушается, так как количество элементов не соответствует требуемым размерам.- Возвращаем пустой массив:
[].