如何按指定块大小拼接2D数组并处理末尾元素左侧补零
实现方案
核心逻辑梳理
我们先从示例反推明确处理规则:
- 将原始2D数组的行按顺序每
block_size行分为一组,最后不足block_size的单独作为一组 - 每组内部先反转行的顺序
- 若组内行数不足
block_size,在组的左侧补对应数量的全零行(长度和原始行一致) - 把每组内的所有行横向拼接为一个新行,所有新行按原始组的顺序排列就是最终结果
Python 实现代码
def block_concat(array_2d, block_size): if not array_2d or block_size <= 0: return [] row_len = len(array_2d[0]) # 按顺序分组 groups = [array_2d[i:i+block_size] for i in range(0, len(array_2d), block_size)] result = [] for group in groups: # 组内反转 reversed_group = group[::-1] # 左侧补零 pad_count = block_size - len(reversed_group) padded = [[0]*row_len for _ in range(pad_count)] + reversed_group # 横向拼接 new_row = [] for r in padded: new_row.extend(r) result.append(new_row) return result # 测试用例 array_2d = [ [0,0,0,0,0,0,0,1], [0,0,0,0,0,0,0,1], [0,0,0,0,0,1,1,1], [0,0,0,0,0,0,1,1], [0,0,0,0,0,1,1,1] ] print(block_concat(array_2d, 2))
运行验证
运行上述代码输出结果和示例完全一致:
[ [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1], [0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1], [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1] ]
内容的提问来源于stack exchange,提问作者socrate
相关产品推荐
相关产品推荐

