Я хотел бы знать, может ли python создать список по понятию с использованием нескольких и дополнительных критериев.Понимание динамического списка
Приведем пример. Учитывая следующий объект (частичное описание):
class Person():
def __init__(self):
self.id = <next id of some kind>
self.name = 'default name'
self.gender = 'm'
self.age = 20
<...>
Предположим, я создал список всех Person
с в world
. Затем я хочу создать графический интерфейс, который позволит мне просматривать коллекцию на основе критериев поиска (концепция GUI выходит за рамки вопроса), например имя (на основе regex), id, пол и возраст (с равным, не равным и больше или меньше). Ни один из критериев поиска не является обязательным (мы можем предположить, что это None
, я думаю), и тип не имеет значения для этого вопроса.
Как я могу отфильтровать список Person
в умном python-way?
Если бы я знал критерии, которые я мог бы сделать понимание:
l = [person for person in world if re.search(person.name, '.*Smith') and person.gender = 'm' and person.age < 20]
Но, как пользователь имеет возможность выбрать то, что он хочет, я не буду знать, какие критерии использовать. Я могу, конечно, построить это, как полноправный функцию:
l = world
if nameSearch:
l = [person for person in l if re.search(person.name, nameSearch)]
if genderSearch:
l = [person for person in l if gender == genderSearch]
<...>
return l
Но я чувствую питон бы способ сделать это более правильно.
Поскольку функции являются гражданами первого класса на Python, вы можете написать набор функций-совпадений, поместить их (динамически) в список и сопоставить с ними в одном понимании списка. – DCS