Вы можете использовать тот факт, что конструкторы для bool
и int
возвращают значения по умолчанию для этих типов данных при вызове без аргумента, то есть bool() is False
и int() == 0
.
. универсальные вещи для любого количества измерений, вы можете использовать немного умной рекурсии ...
def make_array(dimension, element_ctor):
return [element_ctor() for x in range(dimension)]
def make_ndim_array(dimensions, element_ctor):
return make_array(
dimensions[0],
(
element_ctor
if len(dimensions) == 1
else lambda: make_ndim_array(dimensions[1:], element_ctor)
),
)
print(make_ndim_array([2, 3, 4], int))
print(make_ndim_array([3, 3], str))
output
[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]]
[['', '', ''], ['', '', ''], ['', '', '']]
Поскольку element_ctor
может быть любой функцией, которая может быть вызванабез аргумента, вы даже можете использовать это для n-мерного массива случайных чисел ...
import random
print(make_ndim_array([2, 4, 11], random.random))