#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)