仅当不是None时,才通过函数调用构造具有列表推导的集合

时间:2013-01-01 19:05:11

标签: python-3.x list-comprehension

接听电话

set(self.oid_to_path(oid, entries_parents) for oid in modified_by_one_parent_oids)

这样可行,但如果函数返回None

,还会将None添加到列表中

将其修改为

set(self.oid_to_path(oid, entries_parents) for oid in modified_by_one_parent_oids if None != self.oid_to_path(oid, entries_parents))

也可以,没有None s。

但是这有两次调用函数的缺点。如何只调用一次,并使用一些记忆代替?

1 个答案:

答案 0 :(得分:3)

对生成器表达式使用set comprehension ...

g = (self.oid_to_path(oid, entries_parents) for oid in modified_by_one_parent_oids)
result = {el for el in g if el is not None}

请注意,您的代码中实际上没有列表理解。您正在使用生成器表达式调用set构造函数,这可以更简单 - 使用集合理解,如上所示。