Как получить список со списком результатов как распакованный список
У меня есть функция (в примере: 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 ответа
Вы можете использовать выражение генератора вместо понимания списка, чтобы вам не нужно было сначала создавать временный список:
set.union(*(some_function(el) for el in arr)))
или, используя map
:
set.union(*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))
Этот подход не создает список возвращаемых значений и поэтому не удерживает наборы дольше, чем необходимо. Вы можете обернуть его в функцию для чистоты.