在 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))]
我有一个由 '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))]