我还没有找到有关如何在python中创建“非对称*”多维数组的一般性问题。 *“非对称”是指某些本身为数组的元素的长度会有所不同。
second_dim = [1,2]
second_dim[0] = [1,5]
second_dim[1] = [1,5,9]
list = [ [ [ [ '' for i in range(2) ] for j in range(len(second_dim[i])) ] for k in range(5) ] for l in range(6) ]
请注意,这会产生错误:undefined name i
如何使用参数在python中构造这样的数组?
^假设:
a = 2
b = 2
c = 3
d = 5
e = 6
答案 0 :(得分:1)
我真的不确定示例中的含义,但这可能会有所帮助。
如果您在这样的列表中定义所需的尺寸:
dims = [
[4, 5],
[5, 6, 2],
]
您可以使用一个非常简单的递归函数:
def make_dims(dims, fill_func=int):
if isinstance(dims, int):
return [fill_func() for _ in range(dims)]
return [make_dims(x, fill_func) for x in dims]
l = make_dims(dims)
创建具有这样“维度”的列表列表:
len(l) == len(dims) == 2
len(l[0]) == len(dims[0]) == 2
len(l[0][0]) == dims[0][0]) == 4
len(l[0][1]) == dims[0][1]) == 5
len(l[1]) == len(dims[1]) == 3
len(l[1][0]) == dims[1][0] == 5
len(l[1][1]) == dims[1][1] == 6
len(l[1][2]) == dims[1][2] == 2
fill_func()
生产者返回的所有最后一级元素。
以您的示例为例,second_dim = [[1, 5], [1, 5, 9]]
调用make_dims(second_dim)
就可以直接使用。
但是,如果您确定不需要此解决方案提供的更多维度的灵活性,并且您坚持使用列表理解,那么“尝试0”就不会太遥远。但是,您只需要更好地跟踪正在处理的值即可:
[[[0 for _ in range(y)] for y in x] for x in second_dim]