我的代码如下。它循环遍历由frozenset组成的blob,并检查每个blob是否与mapped(一个集合)相交。如果一个blob与mapped相交并且也满足作为终端的条件,则将相交集添加到结果中。你知道吗
result = set()
for b in blobs:
mapped_b = b & mapped
if mapped_b and _is_terminal(mapped_b):
result.add(mapped_b)
这个逻辑能写得更好吗?我在考虑列表理解,但由于映射的b是在运行中形成的,似乎我必须使它多次,这是浪费。你知道吗
[result.add(b&mapped) for b in blobs if b&mapped and _is_terminal(b&mapped)]
同样值得为filter
语句使用if
吗?你知道吗
据我所知,有no such thing as a ^{} statement (例如在Haskell中)允许临时存储
mapped_b
结果。你知道吗但是,您可以使用
map
或生成器来存储中间结果。比如:因此
map(lambda b:b&mapped,blobs)
将生成mapped_b
项(在python-3.x中一次生成一个,在python-2.x中生成一个临时列表)。你知道吗也可以自己使用发电机:
注意,我们这里使用的是集合理解,不是列表理解。在原始代码片段中,还构造了
set
。你知道吗编辑:
根据您的评论,您确实可以使用
filter
这样的if
部分:这在语义上是等价的。一个是否比另一个更受欢迎通常是品味的一个方面。在这里两者很容易互换。你知道吗
相关问题 更多 >
编程相关推荐