我正在寻找一种使用存储在另一个列表中的索引来访问列表中元素的通用方法。
例如,我有列表:
b = [[[[[0.2], [3]], [[4.5], [78]], [[1.3], [0.23]], [[6.], [9.15]]],
[[[3.1], [44]], [[1.], [66]], [[0.18], [2.3]], [[10], [7.5]]],
[[[3], [4.]], [[12.3], [12]], [[7.8], [3.7]], [[1.2], [2.1]]]]]
我需要访问其索引存储在的元素:
c = [0, 0, 0, 1, 0]
即:
3
这行不通:
b[c[0]][c[1]][c[2]][c[3]][c[4]]
因为 b 的形状随着我的代码的每次运行而改变,这就是为什么我需要一种通用方式来使用 c 来访问b 中的元素。
类似于:
b[*c]
我敢打赌会奏效,但事实并非如此。
请您参考如下方法:
使用reduce (或 functools.reduce 与 Python 3 向前兼容)
>>> def getitems(data, keys):
... return reduce(lambda a, b: a[b], [data]+keys)
...
>>> getitems(b, c)
3
这假设 keys 始终是一个列表。
