Как преобразовать подсписки списка в "плоские" списки?
Есть список вида:
[['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
→ Ссылка
Понимая пример из задачи буквально, буду считать, что все элементы исходного списка так выглядят (поэтому не проверяю, является ли последний элемент подсписка списком, и всегда беру последний элемент). Также буду решать прямо изменяя исходный список (что не всегда хорошо - особенно, если пытаться добавлять-удалять элементы списка, по которому идем циклом, но в данном случае количество элементов в общем списке не меняется, поэтому допустимо).
- Идем циклом по списку, перебирая его элементы (подсписки)
- Из каждого подсписка вытаскиваем последний элемент, записываем в переменную
- Удаляем последний элемент из подсписка
- Расширяем (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']]