我一直在努力弄清楚如何获取列表并匹配任何矩阵的形状。
a = [1,2,3,4,5,6,7,8,9]
b = [[3],[[2]],[1,8,2],[[[7,3,2]]],[9]]
我要列出a以匹配矩阵b的尺寸。 a和b都具有相同数量的单个元素。该函数要求a和be具有相同数量的元素。
output = [[1],[[2]],[3,4,5],[[[[6,7,8]],[9]]
我尝试这样做。
import numpy as np
lst = []
start = 0
def match_matrix(a,b):
for k, v in enumerate(b):
shape = np.shape(v)
lst.append(np.reshape(a[start:start+element_num], newshape= shape) # there problem is here, how would I figure out how many elements in any dimension matrix
start += element_num
return lst
答案 0 :(得分:2)
不确定,为什么要为此使用numpy。这是创建列表列表的简单解决方案
>>> a = [1,2,3,4,5,6,7,8,9]
>>> b = [[3],[[2]],[1,8,2],[[[7,3,2]]],[9]]
>>>
>>> def create_list(l, itr):
... return [create_list(e, itr) if isinstance(e, list) else next(itr) for e in l]
...
>>>
>>> create_list(b, iter(a))
[[1], [[2]], [3, 4, 5], [[[6, 7, 8]]], [9]]
答案 1 :(得分:1)
这可以通过递归直接完成。此函数假定列表b
的非列表元素数与列表a
的长度相同
def match_matrix(a, b):
it = iter(a)
def _worker(b):
lst = []
for x in b:
if isinstance(x, list):
lst.append(_worker(x))
else:
lst.append(next(it))
return lst
return _worker(b)