Python中的动态多维列表

Python中的动态多维列表,python,arrays,multidimensional-array,Python,Arrays,Multidimensional Array,我想创建一个函数,它可以将给定的值插入给定的索引到给定的数组中。二维数组非常简单: def insertInto(index, array, value): are index in array? no: iterate over range (len(array) -> index): insert None into array insert value into array return

我想创建一个函数,它可以将给定的值插入给定的索引到给定的数组中。二维数组非常简单:

def insertInto(index, array, value):
    are index in array?
        no:
            iterate over range (len(array) -> index):
                insert None into array
    insert value into array
    return array
但是,如果我想对多维索引执行相同的操作,该怎么办

假设我们在开头有
arr=[]
。然后在执行
insertInto((0,0,2)之后,arr,'yey')
给定的
arr
应该看起来像
[[None,None,'yey']]]
,并且
arr[0][0][2]='yey'

我试着做这样的函数,但很难进入新的维度层次。我的想法是:

def insertInto(索引:元组、数组、值):
currentCoordinate=index.pop(0)
currentLevel=数组[currentCoordinate]
while index:#while len(index)>0
如果大小(数组[i])<当前坐标:
currentLevel=放大列表(currentLevel,currentCoordinate)
#放大列表函数放大给定的列表,因此
#有必要的索引。空白将被零填补
#示例:放大列表([1],3)=[1,无,无,无]
currentLevel[当前坐标]=[]
currentLevel=currentLevel[当前坐标]
#在下一次迭代中,currentLevel变量将等于
#插入列表
currenCoordinate=index.pop(0)
这个解决方案的问题非常明显:我不能分配(例如)
a=l[0]
(其中
l
是一个列表,
a
是一些临时变量),然后修改
a
,因为它不会影响
l
(请参阅)

有人知道如何用另一种方法来做吗


此代码不需要任何库。简化问题的方法是使用递归函数。这样,变量就留在范围内,不应该相互擦除

为了简单起见,我使用了
(index,*tail)
而不是基于元组的索引

def ensure_array_index(array, index):
    while len(array) <= index:
        array.append(None)
    if array[index] is None:
        array[index] = []

def insert_into(array, value, index, *tail):
    ensure_array_index(array, index)
    if len(tail) == 0:
        array[index] = value
    else:
        insert_into(array[index], value, *tail)


arr = []
insert_into(arr, '001', 0, 0, 1)
insert_into(arr, '011', 0, 1, 1)
insert_into(arr, '211', 2, 1, 1)
insert_into(arr, '1', 1)
print arr

>>> [[[None, '001'], [None, '011']], '1', [None, [None, '211']]]
def确保数组索引(数组,索引):
而len(数组)>>[[[None,'001'],[None,'011']],'1',[None,[None,'211']]

唯一的缺点是python调用堆栈限制了插入深度(~100 afaik)

这只是一条建议。与手动操作不同,有很多方法,可以使用
numpy
pandas
来完成这些操作。好的,我要澄清一下,无论如何我都想手动操作。“我不能分配
a=l[0]
然后修改
a
,因为这不会影响
l
”-这是什么意思?当然,如果
l=[]];a=l[0];a、 附加(1)
,然后添加
l=[[1]]
。这与代码的哪一部分有关?与
a
l
相对应的是什么?@mkrieger1,这只是一个例子
l
是一个随机列表,
a
是临时变量。我会把这个问题加进去的。哦,谢谢,那太好了。我也喜欢你使用
*tail
index
的方式。一些我不熟悉的技巧。