Создание списка, состоящего из элементов, извлеченных из другого списка (Python) - PullRequest
3 голосов
/ 27 апреля 2020

Вот мой код:

txt = '''food: bacon, eggs, toast

drinks: orange juice, coffee'''

groups = txt.split('\n\n')
for group in groups:
    nameslist = group.split(': ').pop(0)

print(groups)
print(nameslist)

Вывод для print (groups) , как и ожидалось: ['food: bacon, eggs, toast', 'drinks: orange juice, coffee']

Я пытаюсь получить список ['food', 'drinks'] в качестве выходных данных для print (nameslist) , но Python дает мне 'drinks' в качестве выходных данных, как если бы он брал только со второго элемента, а не итерировал.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Проблема вашего подхода в том, что nameslist никогда не инициализируется и сбрасывается на каждой итерации, которую вы, вероятно, хотели бы сделать:

txt = '''food: bacon, eggs, toast

drinks: orange juice, coffee'''

nameslist = [] # initialize namelist
groups = txt.split('\n\n')
for group in groups:
    nameslist.append(group.split(': ').pop(0)) # append instead of overwriting

print(groups)
print(nameslist)  # ['food', 'drinks']

Кроме того, вы можете выбросить l oop и используйте list comprehension для достижения этого:

namelist = [x.split(':')[0] for x in groups]  # ['food', 'drinks']
1 голос
/ 27 апреля 2020

Как вы сейчас настроили, вы ничего не добавляете в список. Вы просто устанавливаете список имен переменных в качестве последнего всплывающего окна. Попробуйте это:

nameslist = []  # Define an empty list
groups = txt.split('\n\n')
for group in groups:
    nameslist.append(group.split(': ').pop(0)) #Add popped element to the list
...