我有一个返回集合的函数(在示例中:some_function()
)。我得到了一些元素的数据结构(在示例arr
中),需要将元素映射到函数,并且我想取回所有元素的集合。不是一组集合,而是一组所有元素的集合。我知道some_function()
仅返回一维集。
我尝试使用map
,但并没有完全使用它,我无法将其用于列表推导,但是我不太喜欢我的解决方案。
是否可以不创建列表然后解压缩?
还是我可以不用很多工作就能以某种方式转换从map
方法获得的收益?
示例:
arr = [1, 2, 3]
# I want something like this
set.union(some_function(1), some_function(2), some_function(3))
# where some_function returns a set
# this is my current solution
set.union(*[some_function(el) for el in arr]))
# approach with map, but I couldn't convert it back to a set
map(some_function, arr)
答案 0 :(得分:2)
我认为您当前的解决方案很好。如果要避免创建列表,可以尝试:
set.union(*(some_function(el) for el in arr)))
答案 1 :(得分:2)
您可以使用生成器表达式来代替列表理解,这样您就不必先创建临时列表:
set.union(*(some_function(el) for el in arr)))
或使用map
:
set.union(*map(some_function, arr))
答案 2 :(得分:1)
在Python中,有时您不必花哨。
result = set()
for el in arr:
result.update(some_function(el))
这种方法不会创建返回值列表,因此保留集合的时间不会超过必要的时间。您可以将其包装在一个函数中以保持整洁。