【发布时间】:2017-06-16 03:17:51
【问题描述】:
我想对我拥有的一些数据进行分类,为此我想对 python 列表进行链式索引。简化我有一个嵌套列表:
lst = [[[1], [2]], [[3, 3], [4]], [[5], [6,6,6]]]
我想迭代前两个索引的乘积,但保持第三个相同:
from itertools import product
for index1, index2 in product(range(3), range(2)):
print(lst[index1][index2][0])
但是,我想在不事先知道需要深入多少子结构的情况下使其更通用(我想让ranges 的数量传递给itertools.product 变量)。
我有点挣扎如何概括[index1][index2][0] 以接受indices 的任意数字,我能想到的最好的数字是functools.reduce:
from functools import reduce
for indices in product(range(3), range(2)):
print(reduce(list.__getitem__, indices, lst)[0])
这看起来非常复杂(并且比手动索引慢得多),所以我想知道是否有更好更快的方法来做到这一点。我正在使用 python 2.x 和 3.x,外部库绝对没问题(但它不应该需要 NumPy 或基于 NumPy 的包)。
【问题讨论】:
-
根据你的说法“但是我想让这个更一般化,而不事先知道这需要深入多少子结构。” 你的意思是列表的深度是未知的即它可以是 n 级深/嵌套?
-
对不起,如果我不清楚,变量部分是
ranges的 number (n) 给product(以及indices的长度) )。列表的深度是“未知的”,但至少有n+1子结构深。我会更新问题。
标签: python performance list iteration