如何在Python中实现矩阵元素垂直重排:0上移1下沉
实现0-1矩阵的垂直重排(1下沉、0上浮)
核心思路
要实现需求的垂直重排,核心是按列独立处理:
- 对矩阵的每一列,统计其中
1的总数量 - 重排后,该列的底部
count_ones个位置填充1,剩余顶部位置填充0 - 所有列处理完成后,组合成新矩阵,即可保证全局的
0和1数量与原矩阵完全一致
Python 实现示例
# 输入矩阵 input_matrix = [ [1,0,1,1,0,1,0], [0,0,0,1,0,0,0], [1,0,1,1,1,1,1], [0,1,1,0,1,1,0], [1,1,0,1,0,0,1] ] def vertical_rearrange(matrix): rows = len(matrix) if rows == 0: return [] cols = len(matrix[0]) # 初始化全0结果矩阵 result = [[0]*cols for _ in range(rows)] for col in range(cols): # 统计当前列的1数量 count_ones = sum(row[col] for row in matrix) # 从底部开始填充1 start_row = rows - count_ones for row in range(start_row, rows): result[row][col] = 1 return result # 执行重排并输出结果 output_matrix = vertical_rearrange(input_matrix) for row in output_matrix: print(row)
输出结果
运行上述代码后,会得到与示例一致的重排矩阵:
[0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 1, 0, 0, 0] [1, 0, 1, 1, 0, 1, 0] [1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1]
扩展说明
- 该逻辑适用于任意行数和列数的0-1矩阵,包括空矩阵或单行/单列的边界情况
- 如果使用其他编程语言(如C#、JavaScript),核心逻辑完全一致:按列统计1的数量,再从底部填充1即可
- 时间复杂度为O(rows×cols),属于线性时间复杂度,对于游戏场景的矩阵规模来说效率足够
内容的提问来源于stack exchange,提问作者John_Milkshake
相关产品推荐
相关产品推荐

