Как разделить элементы списка, разделенные], [ в Python

#python #list

Вопрос:

У меня есть список, который выглядит так :

 mylist=[[["A","B"],["A","C","B"]],[["A","D"]]]
 

и я хочу вернуться :

 mylist=[["A","B"],["A","C","B"],["A","D"]]
 

Использование split() функции возвращает ошибку :

объект списка не имеет разделения атрибутов

Поэтому я не уверен, как мне следует разделить элементы этого списка.
Спасибо!

Комментарии:

1. То, что вы пытаетесь сделать, — это версия «выравнивания». Если вы используете этот термин в своем поиске, вы многое узнаете об этом. Кстати, этот вопрос, похоже, не имеет ничего общего с networkx. Можем ли мы удалить эту метку?

Ответ №1:

Я не уверен, почему вы думаете, что разделение принесет вам какую-то пользу; в конце концов, вы-если что-то-объединяете списки второго слоя. Но выравнивание на один уровень может быть достигнуто с помощью понимания:

 mylist = [inner for outer in mylist for inner in outer]
# [['A', 'B'], ['A', 'C', 'B'], ['A', 'D']]
 

Одним из способов (возможно, это дело вкуса) упростить это itertools.chain :

 from itertools import chain

mylist = list(chain(*mylist))
 

Комментарии:

1. Я думаю, что этот ответ можно было бы улучшить, объяснив, почему исходный код не работает. То ],[ , что вы видите в строковом представлении списка, является чистой визуализацией. Нет необходимости разбивать список, так как он уже разбит на элементы в памяти вашего компьютера. Мне нравится предложение использовать itertools.chain , которое объясняет, чего вы хотите (объединить внутренние элементы в новый список), без большого отвлекающего потока управления.

2. Я не совсем понимаю, о чем вы говорите. В вопросе нет строкового представления какого-либо списка.

3. Я имею в виду, что из названия мне кажется, что оригинальный плакат считает, что каким-то образом ],[ является разделителем между списками, на котором можно разделить список. Но поскольку это действительно список, нет необходимости разделять его, как вы сказали в своем ответе.

4. Возможно, никто не знает, что происходит в голове начинающего программиста 😀

5. Ах, хорошо, спасибо за разъяснение этого (я новичок, поэтому я ценю объяснение — извините, если вопрос очевиден для большинства!)

Ответ №2:

Для этого используйте for-loop. Вот пример кода:

 output = []
for list_element in my_list:
    for single_list in list_element:
        output.append(single_list)