如何替换二维数组中的单个元素?双重索引失效问题排查
问题分析与解决
核心问题
你遇到的替换整列而非单个元素的问题,根源在于二维数组的创建方式错误。
错误原因
你用arr = [[-1] * len(field)]*len(field)创建二维数组时,* len(field)只是把同一个子列表重复了多次,所有行实际上指向同一个列表对象。所以当你修改arr[y][x]时,所有行的第x个元素都会跟着改变。
另外代码里还有一个语法错误:arr[y][x]) = int(total_mines)多了一个右括号,会导致运行报错。
修正方案
- 用列表推导式创建独立的二维数组:确保每一行都是新的列表,互相独立。
- 修复语法错误:去掉多余的右括号。
修正后的代码
def solution(field, x, y): # 用列表推导式创建独立的二维数组 arr = [[-1 for _ in range(len(field))] for _ in range(len(field))] print(arr) total_mines = 0 for array in field: temp_mines = array[x-1] + array[x] + array[x+1] total_mines += temp_mines # 去掉多余的右括号 arr[y][x] = int(total_mines) print(arr) # 示例调用 field =[[0, 1, 1],[1, 0, 1],[0, 0, 1]] x_axis = 1 y_axis = 1 solution(field, x_axis, y_axis)
运行结果
[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]] [[-1, -1, -1], [-1, 5, -1], [-1, -1, -1]]
现在只有arr[1][1]被修改为5,符合预期。
内容的提问来源于stack exchange,提问作者ilyas Abdulkadir
相关产品推荐
相关产品推荐

