Да, вы используете не тот инструмент. Понимание списка возвращает совершенно новое значение, поэтому вы можете сделать это:
self.__map = [[c.state | s for c in row] for row in self.__map]
Но мой инстинкт заключается в том, что вы должны просто использовать два цикла for:
for row in self.__map:
for c in row:
c.state |= s
В понимании списка результат должен быть выражением. Это потому, что ваше двойное понимание просто сахар для этого:
list1 = []
for row in self.__map:
list2 = []
for c in row:
list2.append(c.state | s)
list1.append(list2)
self.__map = list1
Нет смысла говорить
list2.append(c.state |= s)
Поскольку самое внутреннее выражение должно возвращать что-то, что будет добавлено к list2
.
По сути, списки понимают полную копию себя .__ map каждый раз, когда вы обновляете флаги. Если ты этого хочешь, то иди с этим. Но я подозреваю, что вы просто хотите изменить существующую карту. В этом случае используйте двойные петли for
.