2015-05-27 4 views
1

Как получить доступ к элементу вложенного списка с другим списком, который содержит индексы?Python2: доступ к вложенному списку с использованием списка индексов

например:

# this is the variable containing the indices 
a = [0, 1] 

b = [[1,2],[3,4]] 

в действительности, эти списки заполнены элементами самоуправления определены классы и список, содержащий «координаты» (а) имеет более 2-х элементов.

Есть ли возможность получить доступ к b [0] [1] автоматически? Раньше я использовал этот код:

c = deepcopy(b) 
for el in a: 
    c = c[el] 

но так как б довольно большой, я хотел бы, чтобы избавиться от этого DeepCopy без манипулирования б в реальности.

Я доволен любыми предложениями :)

Спасибо!

+5

Я чувствую проблему [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – TigerhawkT3

+0

Какова Ваша цель с этим кодом? – SuperBiasedMan

+0

У меня есть вложенный список 'b', элементы которого я хотел бы получить, используя индексы в списке' a'. Второй фрагмент кода просто показывает, что я использовал до сих пор. Если у вас есть какие-либо предложения, пожалуйста, скажите мне :) – user3692467

ответ

2

Просто бросьте его в функцию. Это будет держать его область действия, так что вы не перезаписывать исходное значение

def nested_getitem(container, idxs): 
    haystack = container 
    for idx in idxs: 
     haystack = haystack[idx] 
    return haystack 

DEMO:

>>> a = [0, 1] 
>>> b = [[1, 2], [3, 4]] 
>>> nested_getitem(b, a) 
2 

Вы могли бы сделать это с functools.reduce, а также, если вы были безумны.

import functools 
import operator 

def nested_getitem(container, idxs): 
    return functools.reduce(operator.getitem, idxs, container) 
+0

Спасибо. Это работает для выделения элементов, но что, если я хочу манипулировать элементом? например nested_getitem (b, a) = 0. – user3692467

+0

@ user3692467 В этом случае, почему вы пытаетесь сделать глубокую копию в примере в своем вопросе ??? –