我有这样的单子:
A [2, -4, 3, 3, 1, 2, 1, 4, -1] B [1, 2, 3, 4, 5, 6]
我想把他们改造成
A [2,-4,3,3,1,2,1,4,-1]
B [1、2、3、4、5、6]
在不使用numpy的情况下,是否有一个轻量级的函数来完成这个任务?
发布于 2022-09-30 01:44:28
当然,您可以使用此菜谱与iter和zip一起按大小分组。
def group_size(L,size):
return list(zip(*[iter(L)]*size))
print(group_size([1,2,3,4,5,6,7,8,9],3))发布于 2022-09-30 02:21:40
好的,Joran Beasley给出了一个很好的答案,所以让我们使用它,并在一个能够将平面列表和2D列表重组成所需形状的函数中,使用它来使列表变得平坦:
def reshape_list(L, xsize, ysize=None, fillna=False):
if isinstance(L[0], list):
_L = []
for l in L: _L+=l
L = _L
if not fillna:
if ysize:
assert xsize*ysize == len(L)
else:
assert len(L)%xsize == 0
return list(map(list,zip(*[iter(L)]*xsize)))
else:
gap = []
if ysize:
if xsize*ysize > len(L):
gap = [None]*(xsize*ysize - len(L))
else:
v, r = divmod(len(L),xsize)
gap = [None]*r
return list(map(list, zip(*[iter(L+gap)]*xsize)))
print(reshape_list([1,2,3,4,5,6], 2))
print(reshape_list([[1,2],[3,4],[5,6]], 3))给予:
[[1, 2], [3, 4], [5, 6]]
[[1, 2, 3], [4, 5, 6]]当我们正在重塑列表时,如何转换2D列表可能也很有趣,因为转置2D列表会带来另一个结果,即重塑:
def transpose_2D_list(L):
return list(map(list,zip(*L)))
print(transpose_2D_list([[1,2],[3,4],[5,6]]))给予:
[[1, 3, 5], [2, 4, 6]]^-注意使用xsize=3进行整形的不同之处
https://stackoverflow.com/questions/73903142
复制相似问题