Предположим, что у меня есть кортеж (1, 2, 3)
и хотите индексировать многомерный массив с ним, такие как:Индексация массив с кортежем
index = (1, 2, 3)
table[index] = 42 # behaves like table[1][2][3]
index
имеет неизвестное число измерений, так что я не могу сделать:
table[index[0]][index[1]][index[2]]
Я знаю, что я мог бы сделать что-то вроде этого:
functools.reduce(lambda x, y: x[y], index, table)
но это совершенно уродливый (и, возможно, также неэффективный), поэтому я задаюсь вопросом, есть ли лучший, более питонический выбор.
EDIT: Может быть, простой цикл является лучшим выбором:
elem = table
for i in index:
elem = elem[i]
EDIT2: На самом деле, есть проблема с обоими решениями: Я не могу присвоить значение индексированного массива :-(, обратно некрасиво:
elem = table
for i in index[:-1]:
elem = elem[i]
elem[index[-1]] = 42
Умное решение! Тем не менее, мой массив на самом деле является непрерывным ctypes.c_float, не может использовать словари там. Хороший ответ, тем не менее. –