我的问题的简化版本:
我有一个列表理解,用于在二维列表上设置位标志,因此:
s = FLAG1 | FLAG2 | FLAG3
[[c.set_state(s) for c in row] for row in self.__map]
set_state所做的就是:
^{pr2}$这很好用,但是我必须在每个单元格中设置函数“set_state”。地图上的每个单元格都有一个.状态,所以我要做的是:
[[c.state |= s for c in row] for row in self.map]
或者
map(lambda c: c.state |= s, [c for c in row for row in self.__map])
但两者都不起作用(语法错误)。也许我用map/lamda找错树了,但我想把set AU state除掉。或许知道为什么作业在列表理解中不起作用
你不需要一个列表理解,因为你正在修改你的数据,而不是创建一个新的列表。在
做一个循环。在
列表理解用于创建列表。您似乎并不关心您正在生成的实际列表,因此应该使用
for
语句,如下所示:是的,你用错了工具。列表理解返回一个全新的值,因此您可以执行以下操作:
但我的直觉是你应该只使用两个for循环:
^{pr2}$在列表理解中,结果必须是一个表达式。那是因为你的双重理解只是为了这个:
说起来没有道理
因为最里面的表达式必须返回要附加到
list2
的内容。在基本上,每次更新标志时,列表理解都会生成一个全新的self.\u图。如果那是你想要的,那就去吧。但我怀疑你只是想改变现有的地图。在这种情况下,使用双
for
循环。在相关问题 更多 >
编程相关推荐