Как сгладить неправильный кортеж кортежей - PullRequest
0 голосов
/ 06 мая 2020

У меня есть кортеж таких кортежей:

(('int', 3), (('int', 50), (('int', 4), ('int', 99))))

И я хочу получить один уплощенный кортеж вроде этого:

(('int', 3), ('int', 50), ('int', 4), ('int', 99))

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

1 Ответ

0 голосов
/ 07 мая 2020

Используйте любой метод для создания плоского списка и используйте if/else, чтобы проверить, есть ли у вас кортеж ("text", integer), и не сводите этот элемент.

def flatten(data):
    # check if you have tuple ("text", integer)
    if isinstance(data, tuple) and len(data) == 2 and isinstance(data[0], str) and isinstance(data[1], int):
        # returns it as tuple with single element: (("text", integer),)
        result = [data]
        #print(data)
        return tuple(result)

    # flatten other elements
    result = []
    for item in data:
        result += flatten(item)
    return tuple(result)

data = (('int', 3), (('int', 50), (('int', 4), ('int', 99))))
data = flatten( data )
print(data)

Результат:

(('int', 3), ('int', 50), ('int', 4), ('int', 99))
...