Как получить список со списком результатов как распакованный список - PullRequest
0 голосов
/ 01 февраля 2019

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

0 голосов
/ 01 февраля 2019

В Python иногда вам просто не нужно быть необычным.

result = set()

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

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

0 голосов
/ 01 февраля 2019

Вы можете использовать выражение генератора вместо понимания списка, чтобы вам не нужно было сначала создавать временный список:

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

или, используя map:

set.union(*map(some_function, arr))
0 голосов
/ 01 февраля 2019

Я думаю, что ваше текущее решение в порядке.Если вы хотите избежать создания списка, вы можете попробовать:

set.union(*(some_function(el) for el in arr)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...