Как преобразовать подсписки списка в "плоские" списки?

Есть список вида:

[['aa', 'bb', ['cc', 'dd']], ['aa1', 'bb1', ['cc1', 'dd1']]]

Ожидаю получить:

[['aa', 'bb', 'cc', 'dd'], ['aa1', 'bb1', 'cc1', 'dd1']]

Как решить эту задачу?


Ответы (2 шт):

Автор решения: Jack_oS
my_list = [['aa', 'bb', ['cc', 'dd']], ['aa1', 'bb1', ['cc1', 'dd1']]]
new_list = []

for sub_list in my_list:
    tmp_list = []
    for el in sub_list:
        if isinstance(el, list):
            tmp_list += el
        else:
            tmp_list.append(el)
    new_list.append(tmp_list)

print(new_list)

выведет:

[['aa', 'bb', 'cc', 'dd'], ['aa1', 'bb1', 'cc1', 'dd1']]
→ Ссылка
Автор решения: insolor

Понимая пример из задачи буквально, буду считать, что все элементы исходного списка так выглядят (поэтому не проверяю, является ли последний элемент подсписка списком, и всегда беру последний элемент). Также буду решать прямо изменяя исходный список (что не всегда хорошо - особенно, если пытаться добавлять-удалять элементы списка, по которому идем циклом, но в данном случае количество элементов в общем списке не меняется, поэтому допустимо).

  1. Идем циклом по списку, перебирая его элементы (подсписки)
  2. Из каждого подсписка вытаскиваем последний элемент, записываем в переменную
  3. Удаляем последний элемент из подсписка
  4. Расширяем (extend) подсписок элементами из записанного в переменную списка
x = [['aa', 'bb', ['cc', 'dd']], ['aa1', 'bb1', ['cc1', 'dd1']]]

for sublist in x:
    temp = sublist[-1]  # Сохраняем последний элемент подсписка в переменную
    sublist.pop()  # Удаляем последний элемент
    sublist.extend(temp)  # Или sublist += temp - добавляем все элементы из temp в подсписок

print(x)

Вывод:

[['aa', 'bb', 'cc', 'dd'], ['aa1', 'bb1', 'cc1', 'dd1']]
→ Ссылка