如何在对象列表中搜索属性?

2024-06-26 03:04:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python创建一个电话注册器,用户可以在其中选择向注册器中添加一个新的人。我需要得到的代码,以找出如果该用户已经在注册。我的对象具有属性surnamefirstnamephonenumberaddress。你知道吗

我的代码如下所示:

def personInRegister(surname, firstname, phonenumber, address):
    matchInRegister = False
    x = 0
    while x in range(len(people)):
        if (people[x].surname.lower == surname.lower and
            people[x].firstname.lower == firstname.lower and
            people[x].phonenumber == phonenumber and
            people[x].address.lower == address.lower):
             matchInRegister = True
             break
        else:
            x = x+1
    return matchInRegister

这里的人是我的名单。你知道吗

我不能让它工作,我不知道我做错了什么。请帮帮我!你知道吗


Tags: and对象代码用户属性addressdefsurname
1条回答
网友
1楼 · 发布于 2024-06-26 03:04:24

^{}是一个函数。str.lower()调用函数并返回字符串的小写版本。你知道吗

Python有一个有用的函数来检查序列中的^{}值是否是True。所以我们可以建立一个布尔值序列,如下所示:

def personInRegister(surname, firstname, phonenumber, address):
    return any(person.surname.lower() == surname.lower() and
               person.firstname.lower() == firstname.lower() and
               person.phonenumber == phonenumber and
               person.address.lower() == address.lower()
               for person in people)

为了避免每次通过循环调用lower()查询,您可以将查询创建为元组并进行比较:

def personInRegister(surname, firstname, phonenumber, address):
    query = (surname.lower(),
             firstname.lower(),
             phonenumber,
             address.lower())
    return any((person.surname.lower(),
                person.firstname.lower(),
                person.phonenumber,
                person.address.lower()) == query
               for person in people)

如果要返回person,可以使用^{}

def personInRegister(surname, firstname, phonenumber, address):
    query = (surname.lower(),
             firstname.lower(),
             phonenumber,
             address.lower())
    return next((person for person in people
                 if query == (person.surname.lower(),
                              person.firstname.lower(),
                              person.phonenumber,
                              person.address.lower())),
                None)

如果找不到此人,则返回None。如果不使用默认返回,则必须使用生成器表达式。所以这告诉你一个人的存在,并给你他们的记录。你知道吗

相关问题 更多 >