У меня есть функция, которая создает список списков списков:
def initialize_master_list(n, h, o):
master_list = []
master_list.append([[0 for i in range(n+1)] for j in range(h)])
master_list.append([[0 for i in range(h+1)] for j in range(o)])
return master_list
Это создает список 2
списков, где первым является список h
списков длины n+1
а второй список o
списков длиной h+1
. Эта функция инициализирует каждый из элементов самого глубокого списка как 0
. Здесь я напечатал, как выглядит список:
N, H, O = 4, 3, 2
ML = initialize_master_list(N, H, O)
print(ML)
[[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0]]]
Вместо 0
я хочу инициализировать эти значения как поступающие из одномерного списка или массив значений. Этот одномерный список имеет длину (h * n+1) + (o * h+1)
. Для текущего примера длина составляет (3 * 5) + (2 * 4) = 15 + 8 = 23
.
Например:
GRAB = [round(random.uniform(1, 9),1) for _ in range((H*(N+1))+(O*(H+1)))]
print(GRAB)
[7.4, 5.7, 5.3, 7.1, 2.7, 4.3, 4.1, 7.0, 1.4, 1.4, 2.2, 3.2, 1.6, 8.4, 5.7, 2.0, 4.5, 7.8, 4.1, 5.1, 1.5, 1.6, 1.7]
Как я могу инициализировать ML
, используя эти значения, вместо этого?
Мой ожидаемый вывод может быть:
ML = initialize_master_list(N, H, O, GRAB)
print(ML)
[[[7.4, 5.7, 5.3, 7.1, 2.7], [4.3, 4.1, 7.0, 1.4, 1.4], [2.2, 3.2, 1.6, 8.4, 5.7]], [[2.0, 4.5, 7.8, 4.1], [5.1, 1.5, 1.6, 1.7]]]
Как я могу инициализировать эту структуру списка на основе N, H, O
? Те значения, которые я выбрал произвольно, они могут быть любыми, но я могу предположить, что GRAB
будет точным числом чисел, с которого я хочу инициализировать список.
Моя лучшая идея состояла в том, чтобы создать генератор и получить значения (вместо 0 for i in range...
в initialize_master_list
, это будет next(generator) for i in range...
, но это безобразно. Я надеюсь, что есть более простой способ, который не объединяет все вместе.