Python 如何将用户输入与类对象数据进行比较?

Python 如何将用户输入与类对象数据进行比较?,python,Python,这里完全是初学者 我试图理解如何将用户输入数据与预设的类数据进行比较。假设class=Person,加上年龄、体重和姓名 我有两个人,johnsmith=Person(50200,“约翰·史密斯”) 汤姆·琼斯=个人(40220,“汤姆·琼斯”) 我想提示用户输入名称Tom,并检查Person类的所有“name”属性。比如说 person=input(打印(“插入此人姓名”)输入“Tom”,然后返回所有Tom的列表供用户选择,如果只有一个,则确认用户实际上指的是Tom Jones 我是否应该创建

这里完全是初学者

我试图理解如何将用户输入数据与预设的类数据进行比较。假设
class=Person
,加上年龄、体重和姓名

我有两个人,
johnsmith=Person(50200,“约翰·史密斯”)
汤姆·琼斯=个人(40220,“汤姆·琼斯”)

我想提示用户输入名称Tom,并检查Person类的所有“name”属性。比如说

person=input(打印(“插入此人姓名”)
输入“Tom”,然后返回所有Tom的列表供用户选择,如果只有一个,则确认用户实际上指的是Tom Jones

我是否应该创建一个像
people=[tomjones,johnsmith,(etc)]
这样的数组,并在其中进行搜索

请给我指出正确的方向,谢谢

我是否应该创建一个像
people=[tomjones,johnsmith,(etc)]
这样的数组,并在其中进行搜索

虽然我想如果你希望大量的“人”和频繁的查询总是在同一个字段上(例如,你总是按姓名搜索某个特定的人),你也可能需要创建一个索引来加快搜索速度,例如创建一个dict(可能是
WeakValueDictionary
)它将你的搜索键映射到合适的人


这是因为迭代一个列表既便宜又高效,但是遍历整个列表是线性时间(O(n)),所以如果列表很长,并且遍历了很多次,那么它就加起来了。建立索引的成本很高(并且需要至少遍历整个列表一次),而且查找需要更多的设置,但除了查找之外,设置是固定时间(O(1))。

将Person类的实例存储在列表中是一种方法。然后,您可以在列表中循环以匹配名称

e、 g


首先,您不需要将
打印
放入
输入
中。将所有
个人
数据保存在某种类型的集合中,比如一个列表。然后,您需要做的就是
result=[dude for dude in person\u list if dude.name==user\u input]
当然,调整变量名以匹配您的案例将所有
person
保留在列表中,然后您可以使用
for
-循环检查每个
person
中的姓名,为什么不使用字典?
class Person():

    def __init__(self, age, weight, name):
        self.age = age
        self.weight = weight
        self.name = name


all_persons = []
all_persons.append(Person(50, 200, "John Smith"))  # add your Person instance to a list
all_persons.append(Person(40, 220, "Tom Jones"))

name_input = input("Insert the person's name: ")

for person in all_persons:  # loop through list of all Person instances
    if name_input.lower() in person.name.lower():  # lower() to handle case
        # do something with person