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

How to get listcomprehension result as unpacked list

我有一个函数(在例子中:some_function()),returns一个集合。我得到了一些元素的数据结构(在示例 arr 中),需要将元素映射到函数,我想取回所有元素的集合。不是集合的集合,而是集合中所有元素的集合。我知道 some_function() 只有 returns 一维集。

我尝试使用 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)

我认为您目前的解决方案很好。如果您想避免创建列表,您可以尝试:

set.union(*(some_function(el) for el in arr)))

在Python中,有时候你只要不花哨就可以了。

result = set()

for el in arr:
    result.update(some_function(el))

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

您可以使用生成器表达式而不是列表理解,这样您就不必先创建临时列表:

set.union(*(some_function(el) for el in arr)))

或者,使用 map:

set.union(*map(some_function, arr))