假设我有一个(1, 2, 3)
的元组,并希望用它来索引一个多维数组,如:
index = (1, 2, 3)
table[index] = 42 # behaves like table[1][2][3]
index
的维度数量未知,所以我不能这样做:
table[index[0]][index[1]][index[2]]
我知道我可以这样做:
functools.reduce(lambda x, y: x[y], index, table)
但它完全是丑陋的(也许效率也很低),所以我想知道是否有更好的,更多的Pythonic选择。
编辑:也许简单的循环是最佳选择:
elem = table
for i in index:
elem = elem[i]
EDIT2:实际上,两个解决方案都存在问题:我无法为索引数组赋值:-(,回到丑陋:
elem = table
for i in index[:-1]:
elem = elem[i]
elem[index[-1]] = 42
答案 0 :(得分:3)
这个问题非常有趣,而且你建议的解决方案看起来很好(没有检查过,但是这种问题需要递归处理而你只需要在一行中完成)。 但是,我在程序中使用的pythonic方法是使用元组字典。语法类似于数组,是字典的性能,对我来说没有任何问题。
例如:
a = {(1, 2, 3): 'A', (3, 4, 5): 'B', (5, 6, 7, 8): 'C'}
print a[1, 2, 3]
print a[5, 6, 7, 8]
将输出:
A
B
分配索引非常简单:
a[1, 4, 5] = 42
。 (但你可能想先检查(1,4,5)是否在dict中,否则它将由赋值创建)