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

如何实现Python嵌套列表(4x4棋盘)元素向下移位功能?

实现棋盘元素向下移位的gravity函数

问题描述

给定一个4x4的棋盘(以Python列表形式定义),其中包含空格(" ")和字符"1":

board = [
[" "," ","1"," "],
[" "," ","1"," "],
["1","1"," "," "],
["1"," "," ","1"]
]

需要实现gravity函数,使所有"1"向下移位,最终得到如下结果:

gravity(board) == [
[" "," "," "," "],
[" "," "," "," "],
["1"," ","1"," "],
["1","1","1","1"]
]

实现思路

核心逻辑是逐列独立处理:每一列中的"1"会下沉到该列的底部,空格则留在上方。具体步骤为:

  • 遍历棋盘的每一列,提取该列的所有元素
  • 统计当前列中"1"的数量
  • 构造新的列:用(总行数 - 1的数量)个空格填充列的前半部分,剩余位置用"1"填充
  • 将所有处理后的列重新转换为行优先的棋盘结构

代码实现

def gravity(board):
    rows = len(board)
    if rows == 0:
        return []
    cols = len(board[0])
    
    # 处理每一列,生成新的列数据
    processed_columns = []
    for col_idx in range(cols):
        # 提取当前列的所有元素
        current_col = [board[row_idx][col_idx] for row_idx in range(rows)]
        # 统计列中1的数量
        one_count = current_col.count("1")
        # 构造下沉后的列:空格在前,1在后
        new_col = [" "] * (rows - one_count) + ["1"] * one_count
        processed_columns.append(new_col)
    
    # 将列数据转换为行数据,生成新棋盘
    new_board = []
    for row_idx in range(rows):
        new_row = [processed_columns[col_idx][row_idx] for col_idx in range(cols)]
        new_board.append(new_row)
    
    return new_board

验证测试

可以通过以下代码验证函数是否符合预期:

board = [
[" "," ","1"," "],
[" "," ","1"," "],
["1","1"," "," "],
["1"," "," ","1"]
]

expected = [
[" "," "," "," "],
[" "," "," "," "],
["1"," ","1"," "],
["1","1","1","1"]
]

print(gravity(board) == expected)  # 输出:True

说明

该实现不仅适用于4x4棋盘,只要是行列数一致的二维列表都可以正常工作,具备一定的通用性。函数会返回一个新的棋盘列表,不会修改原输入的board。

内容的提问来源于stack exchange,提问作者Sungchunn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:27:26