如何获得列表理解结果作为解压缩列表

时间:2019-02-01 20:45:44

标签: python list set list-comprehension set-comprehension

我有一个返回集合的函数(在示例中: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)

3 个答案:

答案 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))

这种方法不会创建返回值列表,因此保留集合的时间不会超过必要的时间。您可以将其包装在一个函数中以保持整洁。