Как разложить кортеж со смешанными типами?

Я пытаюсь превратить кортеж со смешанными типами в список. Следующая функция не дает желаемого результата:

a = (1, 2, 3, ['first', 'second'])
def flatten(l): 
return flatten(l[0]) + (flatten(l[1:]) if len(l) > 1 else []) if type(l) is list else [l]

>>> flatten(a)
[(1, 2, 3, ['first', 'second'])]
>>> flatten(flatten(a))
[(1, 2, 3, ['first', 'second'])]
>>> [flatten(item) for item in a]
[[1], [2], [3], ['first', 'second']]

вывод должен быть:

>>> [1, 2, 3, 'first', 'second']

person Bob    schedule 27.06.2016    source источник
comment
Либо это, либо stackoverflow.com/questions/406121 /   -  person Morgan Thrapp    schedule 27.06.2016
comment
Не помог ли вам ни один из существующих вопросов о выравнивании вложенных последовательностей? Их довольно много ...   -  person jonrsharpe    schedule 27.06.2016
comment
if type(l) is list очевидно, не будет работать правильно, если ввод является кортежем, вместо этого вы можете проверить isinstance(l, (list,tuple)).   -  person Tadhg McDonald-Jensen    schedule 27.06.2016


Ответы (1)


def flatten(l):
    if isinstance(l, (list,tuple)):
        if len(l) > 1:
            return [l[0]] + flatten(l[1:])
        else:
            return l[0]
    else:
        return [l]

a = (1, 2, 3, ['first', 'second'])

print(flatten(a))

[1, 2, 3, «первый», «второй»]

person Rahn    schedule 27.06.2016