Python: доступ к элементам многомерного списка, с учетом списка индексов

У меня есть многомерный список F, содержащий элементы некоторого типа. Итак, если, например, ранг равен 4, то к элементам F можно получить что-то вроде F[a][b][c][d] .

Учитывая список L=[a,b,c,d] , я хотел бы получить доступ к F[a][b][c][d] . Моя проблема в том, что мой ранг будет меняться, поэтому я не могу просто иметь F[L[0]][L[1]][L[2]][L[3]] .

В идеале я хотел бы иметь возможность F[L] и получить элемент F[a][b][c][d] . Я думаю, что что-то подобное можно сделать с помощью numpy, но для типов массивов, которые я использую, numpy не подходит, поэтому я хочу сделать это с помощью списков python.

Как я могу сделать что-то подобное выше?

EDIT: Для конкретного примера того, что я пытаюсь достичь, см. Демонстрацию в ответе Мартинна.

2 Solutions collect form web for “Python: доступ к элементам многомерного списка, с учетом списка индексов”

Вы можете использовать функцию reduce() для доступа к следующим элементам:

 from functools import reduce # forward compatibility import operator reduce(operator.getitem, indices, somelist) 

В Python 3 reduce было перенесено в модуль functools , но в Python 2.6 и выше вы всегда можете получить доступ к нему в этом месте.

В приведенном выше somelist используется функция operator.getitem() для применения каждого индекса к предыдущему результату (начиная с somelist ).

Демо-версия:

 >>> import operator >>> somelist = ['index0', ['index10', 'index11', ['index120', 'index121', ['index1220']]]] >>> indices = [1, 2, 2, 0] >>> reduce(operator.getitem, indices, somelist) 'index1220' 

Что-то вроде этого?

 def get_element(lst, indices): if indices: return get_element(lst[indices[0]], indices[1:]) return lst 

Контрольная работа:

 get_element([[["element1"]], [["element2"]], "element3"], [2]) 'element3' get_element([[["element1"]], [["element2"]], "element3"], [0, 0]) ['element1'] 

Или если вы хотите итеративную версию:

 def get_element(lst, indices): res = lst for index in indices: res = res[index] return res 

Контрольная работа:

 get_element([[["element1"]], [["element2"]], "element3"], [1, 0]) ['element2'] 
  • Фильтрация списка Python: удаление подмножеств из списка списков
  • Присвоить значение отдельной ячейке в двухмерном массиве python
  • Почему список необходим для random.choice
  • Как удалить эти дубликаты в списке (python)
  • Python объединяет массивы различных размеров, хранящиеся в списке
  • распечатывать элементы списка по строкам - возможно ли использование формата
  • Найти начальные и конечные индексы подсписок в списке
  • Добавление одной и той же строки в список строк в Python
  • Список списков в списке кортежей, переупорядоченных
  • Создание списка из списка списков в Python
  • В Python я могу напечатать 3 списка по порядковому номеру?
  •  
    Interesting Posts for Van-Lav

    как преобразовать шестнадцатеричную строку в ObjectId в Python

    Scary's sparse eigsh () для небольших собственных значений

    Объект int Python-TypeError не повторяется

    Когда требуется «я»?

    Добавить пользовательские поля в Django REST Framework serializer

    sklearn.cross_validation.StratifiedShuffleSplit – ошибка: «индексы вне пределов»

    UnicodeDecodeError с Django при выполнении syncdb

    Комбинированные запросы Django с выражениями

    Могу ли я заставить SQLAlchemy загружать подзапрос, не повторяя полный исходный запрос?

    Автоматическая выборка последней версии файла при импорте

    Как «остановить» и «возобновить» длительный сценарий Python?

    python формат datetime с "st", "nd", "rd", "th" (английский порядковый суффикс), как PHP "S"

    python: неблокирующий подпроцесс, check stdout

    Как создать серию звуков высокого и низкого тона с использованием Ruby или Python?

    Можно получить доступ к сайтам AppEngine SDK через локальный ip-адрес, когда localhost работает нормально и MacOSX

    Python - лучший язык программирования в мире.