如何实现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
相关产品推荐
相关产品推荐

