如何将列表理解结果作为解压缩列表
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))
我有一个函数(在例子中: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))