You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:05:23