1

我正在尝试创建一个集合,其中包含一个函数返回的所有结果,该函数应用于集合中的每个元素。以下代码片段有望澄清:

results = set()    
for node in nodes:
    results = set.union(results, foo(node))

虽然代码完成了我想要的,但我相信它可以重写得更好、更简洁。由于我必须多次重复此构造,因此非常感谢任何帮助。

提前致谢。

4

3 回答 3

3
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])
于 2013-01-09T10:19:18.497 回答
0

我认为您的解决方案还可以,除了您可以使用|=运算符进行集合联合:

results = set()    
for node in nodes:
    results |= set(foo(node))

或者您可以将所有结果收集在一个列表中,并将其转换为最后设置一次(如果您不期望大量数据)

于 2013-01-09T10:20:39.057 回答
0

也许使用reduce

results = reduce(lambda x,y: set.union(x,y), [foo(x) for x in nodes])
于 2013-01-09T10:21:38.090 回答