【问题标题】:Connecting 2D lists into a larger 2D list in Python在 Python 中将 2D 列表连接到更大的 2D 列表
【发布时间】:2021-03-30 21:07:35
【问题描述】:

如果我有一个随机返回相同大小的二维列表的函数,我将如何将它们“平铺”在一起?

例如,如果我生成 4 个大小为 3 x 3 的 2D 列表,我如何将它们以 2 x 2 的排列组合成一个 6 x 6 的 2D 列表?

    [[0,0,0],   [[1,1,1],   [[2,2,2],   [[3,3,3],
     [0,0,0], +  [1,1,1], +  [2,2,2], +  [3,3,3],
     [0,0,0]]    [1,1,1]]    [2,2,2]]    [3,3,3]]

w=2 安排h=2 制作:

    [[0,0,0,1,1,1],
     [0,0,0,1,1,1],
     [0,0,0,1,1,1],
     [2,2,2,3,3,3],
     [2,2,2,3,3,3],
     [2,2,2,3,3,3]]

在我的例子中,单个列表是随机生成的,并由一个以宽度和高度作为参数的函数返回。

我需要指定一些尺寸(hw)并将(h*w) 随机子网格排列成h by w 超级网格。子网格的顺序/具体排列无关紧要,一个接一个或任何其他排列都可以。

如果我想要一个将超级网格的宽度和高度以及子网格的宽度和高度作为参数的函数,我该怎么做?

【问题讨论】:

  • 你会用 Numpy 吗?
  • 没有 Numpy 的解决方案会更好,但如果您有需要它的解决方案,我想听听@MarkMeyer
  • @MarkMeyer 你的答案去哪儿了?我最终使用了 NumPy,这很容易。我正准备将其标记为已回答
  • 对不起@Ambidextroid 我删除它以为我误解了这个问题。我只是取消删除以防万一。

标签: python list multidimensional-array


【解决方案1】:

这几乎只是通过子网格列表的适当子集进行打磨的问题。 (在单个嵌套理解中可能有一些优雅的方法可以做到这一点,但我没有看到它,哈哈。)

from typing import List, TypeVar

_GridItem = TypeVar('_GridItem')


def tile(
    h: int,
    w: int,
    subgrids: List[List[List[_GridItem]]]
) -> List[List[_GridItem]]:
    tiled_grid: List[List[_GridItem]] = []
    for _ in range(h):
        tile_row = subgrids[:w]
        subgrids = subgrids[w:]
        for i in range(len(tile_row[0])):
            tiled_grid.append([x for subgrid in tile_row for x in subgrid[i]])
    return tiled_grid

这是足够灵活的,它可以与任何hw 和符合subgrids(即len(subgrids) == w*h,并且所有subgrids 的尺寸相同——它不会很难在函数中添加几个检查来强制执行此操作)。下面是使用此函数在 2x4 布局中平铺 8 个 4x2 子网格的示例:

print("\n".join(map(str, tile(2, 4, [
    [[n for _ in range(2)] for _ in range(4)] for n in range(8)
]))))

产量:

[0, 0, 1, 1, 2, 2, 3, 3]
[0, 0, 1, 1, 2, 2, 3, 3]
[0, 0, 1, 1, 2, 2, 3, 3]
[0, 0, 1, 1, 2, 2, 3, 3]
[4, 4, 5, 5, 6, 6, 7, 7]
[4, 4, 5, 5, 6, 6, 7, 7]
[4, 4, 5, 5, 6, 6, 7, 7]
[4, 4, 5, 5, 6, 6, 7, 7]

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2020-04-30
    • 2020-10-15
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多