我有一个多维列表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答案中的演示。
答案 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']