Разбор задачи: Преобразование 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, условие нарушается, так как количество элементов не соответствует требуемым размерам.
  • Возвращаем пустой массив: [].

 


0

Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии