Изменение значения списка с использованием понимания списка в python - PullRequest
0 голосов
/ 20 октября 2018

У меня есть вложенный список, состоящий из «х» и «.», С границами, представленными «-».Если есть «х», я должен изменить «.»в квадрате 3x3 от 'x' до символа, такого как '|'.

У меня есть рабочий код, но мне интересно, если и как я мог бы вместо этого использовать понимание списка для этой проблемы?Я не знаю, как или если я могу заменить значение в моем вложенном списке, используя понимание списка.Я только в том, что при использовании понимания списка, такого как

myList = [expression, for clause, condition] 

, код добавляет выражение в myList, поскольку он повторяет цикл for и проверяет условие.

Учитывая это как мой первоначальный список:

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

Я должен изменить это на это (при условии, что начальная строка и столбец равны 3 и 2:

myList = [
         ['-','-','-','-','-','-','-'],
         ['-','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 голосов
/ 20 октября 2018

Вероятно, не самая лучшая идея, но вот ответ:

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