Объединить в один список после функции map
Имеется функция возвращающая несколько элементов, имеется массив данных, который необходимо обработать этой функцией, при использовании функции map данные возвращаются в tuple. Есть ли возможность их объединить сразу в 1 список?
def func(x):
return x, x * 2
a = [1, 2, 3]
b = list(map(func, a))
print(b) # [(1, 2), (2, 4), (3, 6)]
Хотелось бы
[1, 2, 2, 4, 3, 6]
Нашел такой вариант, но данных очень много и не хотелось бы еще раз их обрабатывать.
l1 = [[1, 2, 3], [4, 5, 6]]
print(sum(l1, [])) # [1, 2, 3, 4, 5, 6]
Ответы (3 шт):
Автор решения: n1tr0xs
→ Ссылка
Вот так можно:
def func(x):
return x, x * 2
a = [1, 2, 3]
b = []
for res in map(func, a):
b.extend(res)
print(b) # [1, 2, 2, 4, 3, 6]
Автор решения: insolor
→ Ссылка
Методом из вашего вопроса (лямбда нужна чтобы преобразовать значение, которое вернула функция func, в список, иначе будет ошибка типизации при попытке сложить кортеж и список):
b = sum(map(lambda x: list(func(x)), a), [])
С помощью chain из itertools:
from itertools import chain
def func(x):
return x, x * 2
a = [1, 2, 3]
b = list(chain(*map(func, a)))
# или b = list(chain.from_iterable(map(func, a)))
print(b) # [1, 2, 2, 4, 3, 6]
chain.from_iterable(something) эквивалентно chain(*something), что использовать - дело вкуса.
Автор решения: Serhii Khortiuk
→ Ссылка
from itertools import chain
list(chain.from_iterable(map(func, a)))
[1, 2, 2, 4, 3, 6]