Python实现固定步长分块拼接多维列表子元素的方法
嵌套列表分块拼接通用Python实现
核心逻辑拆解:
- 按指定的行分组大小,将原二维列表拆分为多个独立行组
- 按指定的列分块大小遍历所有列块位置,依次将每个行组内对应位置的列块拼接为新行,最终组成结果列表
通用泛型实现,支持任意分块尺寸、任意元素类型的二维列表处理:
from typing import TypeVar, List T = TypeVar('T') def block_concat_2d(mat: List[List[T]], row_block_size: int, col_block_size: int) -> List[List[T]]: # 拆分所有行组 row_groups = [] for row_start in range(0, len(mat), row_block_size): row_groups.append(mat[row_start : row_start + row_block_size]) res = [] # 按列块顺序遍历拼接 for col_start in range(0, len(mat[0]), col_block_size): for group in row_groups: current_line = [] for row in group: current_line.extend(row[col_start : col_start + col_block_size]) res.append(current_line) return res
参数说明:
mat:输入的待处理二维列表row_block_size:行分组维度,每多少行划分为一个组col_block_size:列分块维度,每行内每多少个元素划分为一个块
基础示例验证
测试输入:
some_list: list[list[int]] = [[2, 5, 4, 8], [1, 9, 3, 7]]
该场景行组大小为2(所有行归为一组),列块大小为2,调用方式:
new_list = block_concat_2d(some_list, row_block_size=2, col_block_size=2) print(new_list) # 输出:[[2, 5, 1, 9], [4, 8, 3, 7]]
输出与预期结果完全一致。
数独棋盘场景验证
9x9数独棋盘场景下,行每3个为一组,列每3个元素为一块,调用方式:
BOARD: list[list[str]] = [['-', '3', '4', '-', '-', '6', '-', '8', '-'], ['5', '2', '7', '-', '1', '8', '6', '-', '3'], ['-', '6', '-', '-', '-', '9', '4', '-', '2'], ['-', '-', '5', '-', '4', '-', '-', '-', '-'], ['3', '9', '-', '8', '-', '-', '5', '-', '-'], ['-', '4', '-', '-', '-', '2', '9', '3', '6'], ['1', '-', '-', '6', '8', '4', '-', '2', '-'], ['2', '-', '-', '-', '-', '-', '8', '1', '-'], ['-', '-', '-', '2', '7', '1', '3', '-', '-']] new_board = block_concat_2d(BOARD, row_block_size=3, col_block_size=3)
运行得到的new_board与手动拼接的预期结果完全匹配,无需硬编码索引,执行效率远高于手动拼接写法,且可灵活调整分块大小适配其他同类场景。
内容的提问来源于stack exchange,提问作者EintsWaveX
相关产品推荐
相关产品推荐

