使用元组索引数组

时间:2012-03-26 22:54:59

标签: multidimensional-array python-3.x

假设我有一个(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

1 个答案:

答案 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中,否则它将由赋值创建)