Преобразование вложенного списка кортежей во вложенный список первого элемента из кортежей

1

У меня есть вложенный список, подобный этому:

a = [([('m', 2), ([('o', 1), ([('k', 1), ('h', 1)], 2)], 3)], 5),
     ([('e', 3), ([([('t', 1), ('a', 1)], 2), (' ', 2)], 4)], 7)]

Я бы хотел избавиться от второго элемента в каждом кортеже, поэтому список становится списком символов. Как это:

[['m', ['o', ['k', 'h']]], ['e', [['t', 'a'], ' ']]]

Я пробовал следующее:

def transform(array):
    for x in array:
        if type(x[0]) is list:
            transform(x[0])
        else:
            x = x[0]

Он превращает кортежи в символы, но не влияет на данный массив

Теги:
list
nested

1 ответ

3
Лучший ответ

Использование рекурсивного понимания списка:

def recursive_strip(my_list):
    """Recursively remove the second element from nested lists of tuples."""
    return [
        recursive_strip(one) if isinstance(one, list) else one
        for one, two in my_list
    ]

Запустив этот код в приведенном примере, мы получим:

a = [([('m', 2), ([('o', 1), ([('k', 1), ('h', 1)], 2)], 3)], 5),
     ([('e', 3), ([([('t', 1), ('a', 1)], 2), (' ', 2)], 4)], 7)]

result = recursive_strip(a)

В result:

[['m', ['o', ['k', 'h']]], ['e', [['t', 'a'], ' ']]]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню