python列表理解帮助

2024-10-06 13:34:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题的简化版本:

我有一个列表理解,用于在二维列表上设置位标志,因此:

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除掉。或许知道为什么作业在列表理解中不起作用


Tags: 函数inself版本map列表for标志
3条回答

你不需要一个列表理解,因为你正在修改你的数据,而不是创建一个新的列表。在

做一个循环。在

列表理解用于创建列表。您似乎并不关心您正在生成的实际列表,因此应该使用for语句,如下所示:

for row in self.__map:
    for c in row:
        c.state |= s

是的,你用错了工具。列表理解返回一个全新的值,因此您可以执行以下操作:

self.__map = [[c.state | s for c in row] for row in self.__map]

但我的直觉是你应该只使用两个for循环:

^{pr2}$

在列表理解中,结果必须是一个表达式。那是因为你的双重理解只是为了这个:

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的内容。在

基本上,每次更新标志时,列表理解都会生成一个全新的self.\u图。如果那是你想要的,那就去吧。但我怀疑你只是想改变现有的地图。在这种情况下,使用双for循环。在

相关问题 更多 >