Как получить список со списком результатов как распакованный список

У меня есть функция (в примере: 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))

Этот подход не создает список возвращаемых значений и поэтому не удерживает наборы дольше, чем необходимо. Вы можете обернуть его в функцию для чистоты.

Другие вопросы по тегам