在我目前的代码库中,我有以下行,其中to_remove
是一个集合
[to_remove.update(b) for b in some_set if all(a <= b for a in some_dict)]
虽然它有效但是它让我感到困扰,因为它创建了一个未使用的None
列表。它被认为不标准吗?有没有更好的方法呢?
更新
既然已经指出仅仅副作用的列表理解不好,我已将我的代码改为
to_remove.update(itertools.chain.from_iterable(
b for b in some_set if all(a <= b for a in some_dict))
答案 0 :(得分:2)
如果未将输出分配给变量,则不使用列表推导标准或建议使用列表推导。静态分析器(例如pylint
)甚至会标记它。
改为使用传统的循环:
for b in some_set:
if all(a <= b for a in some_dict):
to_remove.update(b)
在您的具体情况下,由于to_remove
是一个集合,以下可能会或可能无法正常工作:
to_remove.update(b for b in some_set if all(a <= b for a in some_dict))