【发布时间】:2017-07-07 10:53:54
【问题描述】:
在我当前的代码库中,我有以下行,其中 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))
【问题讨论】:
-
列表解析中的副作用是不寻常且出乎意料的,这使它们成为一个非常糟糕的主意。应该避免任何让人们感到困惑并且有更直接的实现的东西。
-
一个普通的for循环和一个if语句?
-
你必须这样做
to_remove.update([b for b in some_set if all(a <= b for a in some_dict)]) -
@A-B-B 啊,你把它变成了一个可迭代的。是的,这很好,虽然可能会让 (Python) 初学者感到困惑。