Как создать отдельные списки для каждого набора совпадающих символов, найденных в многострочной строке

#python-2.7

#python-2.7

Вопрос:

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

 str="""Name: abc1
Age: defg1
Place: xyz1

Name: abc2
Age: defg2
Place: xyz2

Name: abc3
Age: defg3
Place: xyz3
"""
  

Используя приведенный ниже код, я могу создать один большой список, но заинтересован в создании трех отдельных списков.

 my_list = []
for each_module in str.split("n"):
        if "Name: " in each_module:
                my_list.append(each_module.strip("Name: "))
        elif "Age: " in each_module:
                my_list.append(each_module.strip("Age: "))
        elif "Place: " in each_module:
                my_list.append(each_module.strip("Place: "))
print my_list
  

Вывод:

 ['abc1', 'defg1', 'xyz1', 'abc2', 'defg2', 'xyz2', 'abc3', 'defg3', 'xyz3']
  

Предпочтительный вывод:

 ['abc1', 'defg1', 'xyz1']
['abc2', 'defg2', 'xyz2']
['abc3', 'defg3', 'xyz3']
  

Ответ №1:

Вы хорошо начали, просто создайте новый список, который вы сбрасываете при заполнении места, и добавьте его в свой основной список, как показано ниже:

 my_str="""Name: abc1
Age: defg1
Place: xyz1

Name: abc2
Age: defg2
Place: xyz2

Name: abc3
Age: defg3
Place: xyz3
"""
my_list = []
new_list = []
for each_module in my_str.split("n"):
    if "Name: " in each_module:
        new_list.append(each_module.strip("Name: "))
    elif "Age: " in each_module:
        new_list.append(each_module.strip("Age: "))
    elif "Place: " in each_module:
        new_list.append(each_module.strip("Place: "))
        my_list.append(new_list)
        new_list = []
print(my_list)
  

Вывод:

 [['bc1', 'defg1', 'xyz1'], ['bc2', 'defg2', 'xyz2'], ['bc3', 'defg3', 'xyz3']]
  

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

1. Спасибо, Джонатан, но на самом деле я ищу значения каждого элемента в списке. Например: [Джон, 22 года, США] [Дэвид, 23 года, Великобритания]

2. Я обновил свой ответ, потому что понял, что вы использовали предопределенную переменную с именем str , которую я исправил после.

3. Спасибо. Это именно то, что я искал. Работает отлично.