Прошу прощения, если на этот вопрос был дан ответ раньше, но я вообще не смог найти ответа на эту проблему.

Допустим, у меня есть этот класс и список объектов:

def Person:
    def __init__(self, name, country, age):
        self.name = name
        self.country = country
        self.age = age
persons = [Person('Tom', 'USA', 20), Person('Matt', 'UK', 19), Person('Matt', 'USA', 20)]

Теперь я хочу, чтобы пользователь искал человека, вводя любую комбинацию значений атрибутов, и я хочу вернуть объекты, которые имеют все эти значения исключительно. Например, если пользователь вводит: «Мэтт», «США» и не указывает возраст, я хочу, чтобы программа возвращала только третье лицо, Мэтт из США, и не возвращала все три объекта, потому что все они имеют некоторые из введенная комбинация значений атрибутов.

Моя реализация в настоящее время использует оператор if с оператором или, который вернет все объекты с момента использования или вернет все объекты, если один оператор имеет значение True, что я пытаюсь решить.

Заранее спасибо.

0
Abdulrahman Selmi 27 Ноя 2021 в 16:20

1 ответ

Лучший ответ

Вы можете использовать понимание списка для задачи. И условие if должно проверять, имеет ли значение значение None else check in the list.

class Person:
    def __init__(self, name, country, age):
        self.name = name
        self.country = country
        self.age = age
    def __repr__(self):
        return "[{},{},{}]".format(name, country, str(age))
persons = [Person('Tom', 'USA', 20), Person('Matt', 'UK', 19), Person('Matt', 'USA', 20)]
name = "Matt"
country = "USA"
age = None
result = [
    p for p in persons
    if (name == None or p.name == name) and 
    (country == None or p.country == country) and 
    (age == None or p.age == age)
]
print(result) #[[Matt,USA,None]]
1
Albin Paul 27 Ноя 2021 в 16:34
Какое простое решение! Большое спасибо. Я официально программист-новичок LOL.
 – 
Abdulrahman Selmi
27 Ноя 2021 в 17:18