在 Python 中交换二维列表中的字母

Swapping a letter in a 2D list in Python

我需要在 Python 中将一个字母与另一个字母交换。我正在使用一个程序来实现这一点。我的代码是:

def mapwithtreasure():
    board[plyr_x][plyr_y] ='o'
    board = [w.replace('o', 'X') for w in board]
    print(board)
    return board

弹出一条错误消息,说我试图在局部变量被赋值之前访问它。该列表称为 'board',如果我在此过程中取出第二行...

board = [w.replace('o', 'X') for w in board]

...程序运行时没有标记一条消息说我正在尝试访问一个尚未分配的变量,即使它引用了相同的名称变量名称:board。'

我也试过这个方法:

def mapwithtreasure():
    board[plyr_x][plyr_y] ='o'
    for n, i in enumerate(board):
        if i=='o':
            board[n]='X'
    print(board)
    return board

但是这个方法好像没有做出需要的替换?

有什么想法吗?

快速修复:添加 global board 作为函数的第一行。

因为你在函数中给 board 赋值,Python 假设它应该是一个局部变量,当你试图在它创建之前修改它时它会感到困惑.通过添加 global board 你告诉 Python 不要假设它是一个局部变量,而是寻找一个具有该名称的全局变量并使用它。

从你的问题来看,你至少有两个问题。您正在修改板上的一个值,该值在该函数中尚不存在。通过参数将其提供给该函数或使用全局变量(或将其设为 class 并使用 class 变量板)。

第二个问题是你不能在列表上使用 replace(),因为你有嵌套结构,所以你需要嵌套列表理解:

>>> board = [['o', 'o', 'o'], ['o', 'o', 'o'], ['o', 'o', 'o']]
>>> board = [[w.replace('o','X') for w in x] for x in board]
>>> board
[['X', 'X', 'X'], ['X', 'X', 'X'], ['X', 'X', 'X']]