gpt4 book ai didi

Python:在创建新对象之前检查对象是否已经存在

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:26 25 4
gpt4 key购买 nike

请帮我看看下面缺少什么。我首先创建了我类(class)的三个对象并将它们添加到集合列表中。在创建任何其他对象之前,我想检查 以确保列表中不存在该人。如果此人已经存在,则不应再次创建此人。我希望通过执行 if prompt_fname == person.fname 和 prompt_lname == person.lname: 来实现此检查。显然,我做的不正确,因为程序仍然运行并创建了列表中已经存在的同一个人。它创造了这个人两次。我该如何修改才能捕捉到这一点,以便不再创建列表中已经存在的人。此外,不应在循环的每次迭代中一次又一次地创建任何新人。我是编程新手,所以请不要在您的回答中遗漏太多细节。非常感谢。

class Person(object):

personslist = []
'''Creates a person object'''
def __init__(self, firstname, lastname):
self.lname = lastname.title()
self.fname = firstname.title()
Person.personslist.append(self)

def __str__(self):
return "{0} {1}".format(self.fname, self.lname)

def __repr__(self):
return "{0} {1}".format(self.fname, self.lname)


Person("Adamu", "Emeka")
Person("Femi", "Ojukwu")
Person("Wole", "Jonathan")


prompt_fname = "Adamu"
prompt_lname = "Emeka"

print(Person.personslist)

for person in Person.personslist:
if prompt_fname == person.fname and prompt_lname == person.lname:
pass
else:
Person(prompt_fname, prompt_lname)

print(Person.personslist)

产量

[Adamu Emeka, Femi Ojukwu, Wole Jonathan]
[Adamu Emeka, Femi Ojukwu, Wole Jonathan, Adamu Emeka, Adamu Emeka]

使用 Python 3.4.1

最佳答案

您的循环正在检查每个条目,如果该特定条目不相等,它会创建另一个实例。但是,如果那个特定的条目相等的,它不会停止,它只是继续到下一个不相等的项目。这就是为什么您实际上在最后得到了 两个 额外条目。

您可以通过保留标志来解决此问题:

found = False
for person in Person.personslist:
if prompt_fname == person.fname and prompt_lname == person.lname:
found = True
break
if not found:
Person(prompt_fname, prompt_lname)

但是,有一种更好的方法可以做到这一点:您的方法效率很低,因为它每次都需要线性扫描。相反,保留一个以全名作为键的对象字典:

class Person(object):

persons_dict = {}
'''Creates a person object'''
def __init__(self, firstname, lastname):
self.lname = lastname.title()
self.fname = firstname.title()
fullname = "%s %s" % (self.fname, self.lname)
Person.persons_dict[fullname] = self

现在您可以简单地一次性检查:

if "%s %s" % (prompt_fname, prompt_lname) not in Person.persons_dict:

关于Python:在创建新对象之前检查对象是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25428977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com