在Python中使用列表解析来重复函数调用

时间:2017-02-17 19:29:55

标签: python list-comprehension

在我目前的代码库中,我有以下行,其中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))

1 个答案:

答案 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))