Я пытаюсь написать код Python, который организует n-мерные данные в бункеры.
Для этого я инициализирую список пустых списков, используя следующую функцию, которая принимает в качестве аргумента массив с количеством бинов для каждого измерения:
def empties(b):
invB = np.flip(b, axis=0)
empty = []
for b in invB:
build = deepcopy(empty)
empty = []
for i in range(0,b):
empty.append(build)
return np.array(empty).tolist() # workaround to clear list references
Например, для двумерных данных с 3 ячейками вдоль каждого измерения следует ожидать следующее:
Введите:
empties([3,3])
Выход:
[ [[],[],[]], [[],[],[]], [[],[],[]] ]
Я бы хотел добавить объекты в этот список списков. Это легко, если размеры известны. Если бы я хотел добавить объект в приведенный выше список в позиции (1,2), я мог бы использовать:
bins = empties([3,3])
obj = Object()
bins[1][2].append(obj)
Однако я хочу, чтобы это работало для любого неизвестного числа измерений и количества ячеек. Поэтому я не могу использовать нотацию «[] [] [] ...» для определения индекса списка. Списки не принимают списки или кортежи для индекса, поэтому это не вариант. Кроме того, я не могу использовать массив NumPy, потому что все списки могут быть разной длины.
Есть ли какое-либо решение о том, как установить элемент списка на основе динамического числа индексов?
В идеале, если списки могут принимать список в качестве индекса, я бы сделал это:
idx = some_function_that_gets_bin_numbers()
bins[idx].append(obj)