我正在尝试编写将n维数据组织到容器中的python代码。
为此,我使用以下函数初始化一个空列表的列表,该函数将一个数组,其中每个维的箱数作为参数:
def empties(b):
invB = np.flip(b, axis=0)
empty = []
for b in invB:
build = deepcopy(empty)
empty = []
for i in range(0,b):
empty.append(build)
return np.array(empty).tolist() # workaround to clear list references
例如,对于在每个维度上具有3个bin的二维数据,应该期望以下内容:
输入:
empties([3,3])
输出:
[ [[],[],[]], [[],[],[]], [[],[],[]] ]
我想将对象附加到此列表列表中。如果尺寸已知,这很容易。如果要在上面的列表的位置(1,2)处添加对象,可以使用:
bins = empties([3,3])
obj = Object()
bins[1][2].append(obj)
但是,我希望它适用于任何未知数量的尺寸和垃圾箱数量。因此,我不能使用“ [] [] [] ...”符号来定义列表索引。列表不接受索引的列表或元组,因此这不是一个选择。另外,我不能使用numpy数组,因为所有列表的长度都可以不同。
对于基于动态索引数设置列表元素有什么解决方法吗?
理想情况下,如果列表可以将列表作为索引,我会这样做:
idx = some_function_that_gets_bin_numbers()
bins[idx].append(obj)
答案 0 :(得分:1)
我的意思是...您可以在自定义类上实现自定义c(0, 0, 0)
,(如numpy一样)
但是假设您做不到,
__getitem__
应该可以解决问题。
答案 1 :(得分:1)
您可以像这样反复将索引应用于嵌套数组:
reduce((lambda a, e: a[e]), index_list, nested_list)
如果nested_list = [0, 1, [[[2], [3]], 4], 5]
和index_list = [2, 0, 1]
,则上面的行将返回[3]
。