我正在尝试创建一个集合,其中包含一个函数返回的所有结果,该函数应用于集合中的每个元素。以下代码片段有望澄清:
results = set()
for node in nodes:
results = set.union(results, foo(node))
虽然代码完成了我想要的,但我相信它可以重写得更好、更简洁。由于我必须多次重复此构造,因此非常感谢任何帮助。
提前致谢。
results = set()
for node in nodes:
results.update(foo(node))
或者
results = set.union(*[foo(node) for node in nodes])
如果nodes
可以为空,则使用它来确保它不会引发异常:
results = set.union(set(), *[foo(node) for node in nodes])
我认为您的解决方案还可以,除了您可以使用|=
运算符进行集合联合:
results = set()
for node in nodes:
results |= set(foo(node))
或者您可以将所有结果收集在一个列表中,并将其转换为最后设置一次(如果您不期望大量数据)
也许使用reduce
results = reduce(lambda x,y: set.union(x,y), [foo(x) for x in nodes])