Python:给定索引列表,访问多维列表的元素

时间:2015-04-01 16:13:49

标签: python list

我有一个多维列表F,包含某种类型的元素。因此,如果等级为4,则可以通过类似F[a][b][c][d]的方式访问F的元素。

根据列表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列表来做。

我怎样才能拥有上述内容?

编辑:有关我想要实现的具体示例,请参阅Martijn答案中的演示。

2 个答案:

答案 0 :(得分:9)

您可以使用reduce() function访问连续元素:

from functools import reduce  # forward compatibility
import operator

reduce(operator.getitem, indices, somelist)

在Python 3中reduce已移至functools模块,但在Python 2.6及更高版本中,您始终可以在该位置访问它。

以上使用operator.getitem() function将每个索引应用于上一个结果(从somelist开始)。

演示:

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

答案 1 :(得分:2)

这样的东西?

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']