3

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

3 回答 3

2

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

set.union(*(some_function(el) for el in arr)))
于 2019-02-01T20:48:03.890 回答
2

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

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

或者,使用map

set.union(*map(some_function, arr))
于 2019-02-01T20:55:21.727 回答
1

在 Python 中,有时您不必花哨。

result = set()

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

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

于 2019-02-01T20:53:03.947 回答