如何在不使用 numpy 的情况下重塑 python 列表

By simon at 2019-05-14 • 0人收藏 • 14人看过

如何将一个列表重新定义为 n 维列表

输入: 列表[1,2,3,4,5,6,7,8]
形状[2,2,2]

输出[1,2] ,[3,4] ,[5,6] ,[7,8]]

4 个回复 | 最后更新于 2019-05-14
2019-05-14   #1

这种递归方法应该可行。

Lst [1,2,3,4,5,6,7,8] shape [2,2,2,2] from functools import reduce from operator import mul def reformation (lst,shape) : if len (shape)1: return lst n reduce (mul,shape [1: ] return [(lst [ i * n: (i + 1) * n ] ,shape [1:) for i in range (len (lst) / / n) reform (lst,shape)](lst,shape)

你可能想用一个检查来包装你的尺寸是否合理... 例如。

Assert reduce (mul,shape) len (lst)
2019-05-14   #2

不是特别优雅:

From functools import reduce from itertools import islice l [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4] s [2,3,4] if s 和 reduce (lambda x,y: x * y,s)(l) : # if number of elements matches product of dimensions,# the first dimension is actually redundant s [1: else: print ("length of input list does not match shape")) return while s: size s。 [ pop () # how many elements for this dimension # split the list based on the size of the dimension it iter (l) l list (iter (lambda: list (islice (it,size)) ,[])][[1,2,3,4] ,[5,6,7,8] ,[9,0,1,2] ,[3,4,5,6] ,[7,8,9,9,4]][1,2,3,4]]
2019-05-14   #3

下面的代码应该可以解决这个问题。

下面给出的解决方案非常笼统。 输入列表可以是旧的不需要的形状的列表,而不是整数列表。

此外,还有单独的可重用工具。 例如人人为我函数非常方便。

从操作符导入 mul 导入迭代工具,作为它导入复制导入功能工具1用于所有 lambda 1: itts.repeat (one,1) def all for one (lyst) :""示例: INPUT: [[[1,2] ,[3,4] ,[5,6] ,[7,8]] OUTPUT: iterator to [1,2,3,4,5,6,7,8] IN GENERAL: 对列表列表中的所有嵌套元素进行迭代 句子太长,请短一点。 名称中的"x"代表"external"""# BEGIN SANITIZATION OF INPUTS number OF elements functions. reduce (mul,xshape,1) assert (number OF elements len (xread lyst)) iread lyst all for one (xread lyst) ishapper (xshape) # END sanitalified OF INPUTS write parent list len next (ishares) try: child list len next (ishares) for in range (0,parent list len) : write child [] write parent。 除了 StopIteration: for in range (0,parent list len) : write child next (iread lyst) write parent。 Append (write child) return write parent def ilyst reformation (write parent,iread lyst,parent list len,ishipe) :""你真的不应该直接调用这个函数。 尝试调用'xlyst reformation'而不是在这个函数的名称中的'i'代表"internal""Try: child list len next (ishares)代表 in range (0,parent list len) : write child [] write parent。 除了 StopIteration: for in range (0,parent list len) : write child next (iread lyst) write parent。 附加(写入子)返回 None 3 dee mat xlyst reform (merged,[2,2,2]) print ("three dee mat",three dee mat)
2019-05-14   #4

这里有一个使用石斑鱼除了第一个维度,每个维度都有一次

句子太长,请短一点

登录后方可回帖

Loading...