Найти - Пользователи
Полная версия: Можно ли раскрыть скобки в tuples в одну строку - метод comprehension ?
Начало » Центр помощи » Можно ли раскрыть скобки в tuples в одну строку - метод comprehension ?
1
alekscooper
Всем привет!

Суть вопроса: имеется список, в котором только числа, упакованные либо в tuples, либо идущие по-одиночке, например, так:

L = [1, 2, (2, 6, 10), (1, 5), (999, 7), 9, 12]

Хочется иметь:
[1, 2, 2, 6, 10, 1, 5, 999, 7, 9, 12]
НО при этом именно одной строкой.

Пока я додумался только до:
[j for i in L for j in i if type(i)==tuple]

Но проблема в том, что в этом случае он теряет “свободные” числа, которые вне tuples, а дописать else он не разрешает - синтаксическая ошибка.

Можно ли как-то реализовать решение в таком виде или только обычная итерация?
py.user.next
>>> import itertools
>>> 
>>> lst = [1, 2, (2, 6, 10), (1, 5), (999, 7), 9, 12]
>>> 
>>> list(itertools.chain.from_iterable(hasattr(i, '__iter__') and i or (i,) for i in lst))
[1, 2, 2, 6, 10, 1, 5, 999, 7, 9, 12]
>>>
terabayt
>>> from functools import reduce
>>> L = [1, 2, (2, 6, 10), (1, 5), (999, 7), 9, 12]
>>> reduce(lambda x, y: x + (list(y) if hasattr(y, '__iter__') else [y]), [[]] + L)
[1, 2, 2, 6, 10, 1, 5, 999, 7, 9, 12]
P.S. как же мне не нравится 3 пайтон…
alekscooper
terabayt
P.S. как же мне не нравится 3 пайтон…
Для новичка (меня, в смысле) выглядит весьма загадочно, да
terabayt
alekscooper
Для новичка (меня, в смысле) выглядит весьма загадочно, да
мне прост очень не нравится что reduce вынесли в отдельный модуль
а во втором пайтоне было бы просто без
>>> from functools import reduce
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB