Как в Python создать листы из объектов в листе на основе регулярного выражения, применяемого к определенной переменной данных объектов? Имеется класс Course с переменной section. Переменная section представляет из себя обычную строку вида . Например, 2R. По сокращению и нужно разделить лист на подлисты R, L, и т.д. (кол-во сокращений не задано). Регулярное выражение:reg = re.compile('(?:\d+)([a-zA-Z]+)') Для примера: перед тем как провести данное действие, я формирую подлисты на основе другой переменной abbr с помощью defaultdict:result = defaultdict(list) for obj in inlist: result[obj.abbr].append(obj) inlist = list(result.values()) Вопрос состоит в том, чтобы созданные листы в общем листе inlist разделить на подлисты еще раз, но уже на основе регулярного выражения, указанного выше, и к переменной section
Вы можете использовать функцию re.findall() для применения регулярного выражения к переменной section каждого объекта в листе inlist. Затем вы можете создать словарь defaultdict для разделения объектов на подлисты в зависимости от найденных сокращений. Ниже приведен пример кода:
import re from collections import defaultdict reg = re.compile('(?:\d+)([a-zA-Z]+)') # пример класса Course class Course: def __init__(self, section): self.section = section # пример листа inlist inlist = [Course('2R'), Course('3L'), Course('1R'), Course('4R'), Course('2L')] # применяем регулярное выражение к переменной section и создаем подлисты на основе сокращений result = defaultdict(list) for obj in inlist: abbreviation = re.findall(reg, obj.section)[0] result[abbreviation].append(obj) inlist = list(result.values()) # печать результатов for sublist in inlist: print([obj.section for obj in sublist])
Этот код разделит объекты в листе inlist на подлисты в зависимости от сокращения в переменной section каждого объекта. Результаты будут распечатаны для каждого подлиста. Вы можете адаптировать этот код под ваш конкретный случай использования.
Вы можете использовать функцию re.findall() для применения регулярного выражения к переменной section каждого объекта в листе inlist. Затем вы можете создать словарь defaultdict для разделения объектов на подлисты в зависимости от найденных сокращений. Ниже приведен пример кода:
import refrom collections import defaultdict
reg = re.compile('(?:\d+)([a-zA-Z]+)')
# пример класса Course
class Course:
def __init__(self, section):
self.section = section
# пример листа inlist
inlist = [Course('2R'), Course('3L'), Course('1R'), Course('4R'), Course('2L')]
# применяем регулярное выражение к переменной section и создаем подлисты на основе сокращений
result = defaultdict(list)
for obj in inlist:
abbreviation = re.findall(reg, obj.section)[0]
result[abbreviation].append(obj)
inlist = list(result.values())
# печать результатов
for sublist in inlist:
print([obj.section for obj in sublist])
Этот код разделит объекты в листе inlist на подлисты в зависимости от сокращения в переменной section каждого объекта. Результаты будут распечатаны для каждого подлиста. Вы можете адаптировать этот код под ваш конкретный случай использования.