Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 6, 2015 15:41:16

alekscooper
Зарегистрирован: 2015-01-25
Сообщения: 66
Репутация: +  1  -
Профиль   Отправить e-mail  

Можно ли раскрыть скобки в tuples в одну строку - метод comprehension ?

Всем привет!

Суть вопроса: имеется список, в котором только числа, упакованные либо в 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 он не разрешает - синтаксическая ошибка.

Можно ли как-то реализовать решение в таком виде или только обычная итерация?

Отредактировано alekscooper (Фев. 6, 2015 15:41:52)

Офлайн

#2 Фев. 7, 2015 01:20:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Можно ли раскрыть скобки в tuples в одну строку - метод comprehension ?

>>> 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]
>>>



Офлайн

#3 Фев. 7, 2015 03:23:24

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Можно ли раскрыть скобки в tuples в одну строку - метод comprehension ?

>>> 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 пайтон…



————————————————
-*- Simple is better than complex -*-

Офлайн

#4 Фев. 7, 2015 06:25:21

alekscooper
Зарегистрирован: 2015-01-25
Сообщения: 66
Репутация: +  1  -
Профиль   Отправить e-mail  

Можно ли раскрыть скобки в tuples в одну строку - метод comprehension ?

terabayt
P.S. как же мне не нравится 3 пайтон…
Для новичка (меня, в смысле) выглядит весьма загадочно, да

Офлайн

#5 Фев. 7, 2015 07:48:18

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Можно ли раскрыть скобки в tuples в одну строку - метод comprehension ?

alekscooper
Для новичка (меня, в смысле) выглядит весьма загадочно, да
мне прост очень не нравится что reduce вынесли в отдельный модуль
а во втором пайтоне было бы просто без
>>> from functools import reduce



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version