我想生成一个下标名词列表,其下标是“多维的”。
例如,使用以下两个列表作为输入:
[1,5,2]
[3,5,1]
我想生成以下列表:
[a[3,1],a[5,5],a[1,2]]
这是一个有效的例子:
(%i1) indexX : [1,5,2];
(%i2) indexY : [3,5,1];
(%i3) makelist(a[i], i, indexX);
(%i4) map(endcons, indexY, %);
(%o1) [1,5,2]
(%o2) [3,5,1]
(%o3) [a[1],a[5],a[2]]
(%o4) [a[3,1],a[5,5],a[1,2]]
这有效,但它需要两行(调用makelist()
然后调用map()
)。因此它不是很优雅。
有没有更好的方法来获得类似的结果?
注意:数组不适合作业,因为1.索引可以是负数和2.我不想为[1,1]
和[5,5]
之间的所有索引分配内存,因为我只是使用其中一些。
答案 0 :(得分:2)
(%i1) display2d: false $
(%i2) indexX : [1,5,2] $
(%i3) indexY : [3,5,1] $
(%i4) map(lambda([[L]], arraymake('a, L)), indexX, indexY);
(%o4) [a[1,3],a[5,5],a[2,1]]