Python如何修改代码将二维列表board中所有'1'移动到每列底部位置
Python实现二维列表每列'1'下沉到列底的代码修改方案
需求说明
将二维列表board中所有的'1'移动到每一列的最底部位置,示例如下:
输入参考:
board = [[" "," ","1"," "], [" "," ","1"," "], ["1","1"," "," "], ["1"," "," ","1"]]
预期输出:
[[" "," "," "," "], [" "," "," "," "], ["1"," ","1"," "], ["1","1","1","1"]]
原代码问题分析
现有代码存在两个核心问题:
- 没有保留原二维列表的行列结构,直接把所有元素打平为一维列表处理
- 没有按列维度统计
'1'的数量并单独处理每列,而是把所有'1'直接拼接在打平后的列表末尾,完全不符合按列下沉的要求
修改后的可运行代码
board = [[" "," ","1"," "], [" "," ","1"," "], ["1","1"," "," "], ["1"," "," ","1"]] def sink_ones_to_col_bottom(board): row_num = len(board) if not row_num: return [] col_num = len(board[0]) # 先转置二维列表,把列转为行方便处理 transposed_cols = list(zip(*board)) processed_cols = [] for col in transposed_cols: # 统计当前列的'1'总数 one_cnt = col.count('1') # 构造新列:前面填充空格,末尾放对应数量的'1' new_col = [' ']*(row_num - one_cnt) + ['1']*one_cnt processed_cols.append(new_col) # 转置回原行列结构,将元组转为列表保证格式一致 return [list(row) for row in zip(*processed_cols)] # 输出结果 result = sink_ones_to_col_bottom(board) print(result)
运行输出:
[[' ', ' ', ' ', ' '], [' ', ' ', ' ', ' '], ['1', ' ', '1', ' '], ['1', '1', '1', '1']]
完全匹配预期要求。
内容的提问来源于stack exchange,提问作者Joshua Bradley
相关产品推荐
相关产品推荐

