2017-02-17 39 views
0

呼吁在我目前的代码库,我有以下行,其中to_remove是一组重复功能使用列表理解Python中

[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

一个普通的for循环和一个if语句? –

+0

你必须这样做'to_remove.update([b for some_set如果全部(a <= b for a some_dict)])' – Elmex80s

回答

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)) 
+0

'to_remove.update(b for some_set,如果全部(a <= b for a some_dict))'不会给出相同的结果 – nos