首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不使用numpy的情况下将(1D)平面列表重塑为列表数组的2D列表?

如何在不使用numpy的情况下将(1D)平面列表重塑为列表数组的2D列表?
EN

Stack Overflow用户
提问于 2022-09-30 01:34:58
回答 2查看 89关注 0票数 0

我有这样的单子:

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的情况下,是否有一个轻量级的函数来完成这个任务?

EN

回答 2

Stack Overflow用户

发布于 2022-09-30 01:44:28

当然,您可以使用此菜谱与iterzip一起按大小分组。

代码语言:javascript
复制
def group_size(L,size):
    return list(zip(*[iter(L)]*size))

print(group_size([1,2,3,4,5,6,7,8,9],3))
票数 2
EN

Stack Overflow用户

发布于 2022-09-30 02:21:40

好的,Joran Beasley给出了一个很好的答案,所以让我们使用它,并在一个能够将平面列表和2D列表重组成所需形状的函数中,使用它来使列表变得平坦:

代码语言:javascript
复制
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))

给予:

代码语言:javascript
复制
[[1, 2], [3, 4], [5, 6]]
[[1, 2, 3], [4, 5, 6]]

当我们正在重塑列表时,如何转换2D列表可能也很有趣,因为转置2D列表会带来另一个结果,即重塑:

代码语言:javascript
复制
def transpose_2D_list(L):
    return list(map(list,zip(*L)))

print(transpose_2D_list([[1,2],[3,4],[5,6]]))

给予:

代码语言:javascript
复制
[[1, 3, 5], [2, 4, 6]]

^-注意使用xsize=3进行整形的不同之处

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73903142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档