使用python中的列表理解来更改列表值

时间:2018-10-20 03:27:08

标签: python for-loop list-comprehension nested-lists

我有一个由“ x”和“。”组成的嵌套列表,其边界由“-”表示。如果存在“ 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

1 个答案:

答案 0 :(得分:0)

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

mybucket.s3.amazonaws.com/object.jpg

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

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))]