在 python 中使用列表理解更改列表值

Changing a list value using a list comprehension in python

我有一个由 'x' 和 '.'s, with the boundaries represented by '-' 组成的嵌套列表。如果有 'x',我必须更改 '.'在 'x' 的 3x3 正方形内添加一个字符,例如“|”。

我有可用的代码,但我想知道是否以及如何使用列表理解来解决这个问题?我不知道如何或是否可以使用列表理解替换嵌套列表中的值。我只是在使用像

这样的列表理解时
myList = [expression, for clause, condition] 

代码在遍历 for 循环并检查条件时将表达式添加到 myList。

鉴于这是我的原始列表:

myList = [
         ['-','-','-','-','-','-','-'],
         ['-','x','.','.','-','-','-'],
         ['-','.','.','.','-','-','-'],
         ['-','.','x','.','-','-','-'],
         ['-','.','.','.','.','.','-'],
         ['-','-','-','-','-','-','-']
         ]

我必须改成这样(假设初始行和列是3和2:

myList = [
         ['-','-','-','-','-','-','-'],
         ['-','x','.','.','-','-','-'],
         ['-','|','|','|','-','-','-'],
         ['-','|','x','|','-','-','-'],
         ['-','|','|','|','.','.','-'],
         ['-','-','-','-','-','-','-']
         ]

我的函数采用嵌套列表和 'x' 的行值和列值作为输入参数。这是我所拥有的并且有效:

for row in [y-1, y, y+1]:
    for column in [x-1, x, x+1]:
        if nestedList[row][column] == '.':
            nestedList[row][column] = character

可能不是最好的主意,但答案如下:

x = 2
y = 3
[['|' if x-1 <= i <= x+1 and y-1 <= j <= y+1 and (myList[j][i] == '.') else myList[j][i] for i in range(len(myList[y]))] for j in range(len(myList))]

请注意,这会生成一个新列表,因为列表理解不适用于分配。为清楚起见,这里进行了扩展:

[['|' if x-1 <= i <= x+1 and y-1 <= j <= y+1\
  and (myList[j][i] == '.') else myList[j][i]\
  for i in range(len(myList[y]))] for j in range(len(myList))]