当python中所有列表的所有维度都未知时,在列表列表中追加项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当python中所有列表的所有维度都未知时,在列表列表中追加项目相关的知识,希望对你有一定的参考价值。
我正在尝试编写将n维数据组织到bin中的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个箱的二维数据,应该预期以下内容:
输入:
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)
答案
我的意思是......你可以在自定义类上实现自定义__getitem__
,(就像numpy一样)
但假设你不能,像:
def append_md(lst, idx, value):
for i in idx:
lst = lst[i]
lst.append(value)
append_md(bins, idx, obj)
应该做的伎俩。
另一答案
您可以迭代地将索引应用于嵌套数组,如下所示:
reduce((lambda a, e: a[e]), index_list, nested_list)
如果nested_list = [0, 1, [[[2], [3]], 4], 5]
和index_list = [2, 0, 1]
,上面的线将返回[3]
。
以上是关于当python中所有列表的所有维度都未知时,在列表列表中追加项目的主要内容,如果未能解决你的问题,请参考以下文章
当这些行与列表中的所有值匹配时,从 Python 中的 DF 中选择行