Python中如何判断指定名称的对象是否存在于对象列表中?
基于姓名判断对象是否在列表中的解决方案
方法一:重写类魔法方法实现"姓名" in 列表语法
你可以在Information类中重写__eq__方法,让它支持和字符串(姓名)的比较逻辑,这样就能直接用"Robert" in list_users完成判断:
class Information: def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): # 处理与字符串的比较:直接匹配姓名 if isinstance(other, str): return self.name == other # 保留同类型对象的比较逻辑(可按需调整规则) elif isinstance(other, Information): return self.name == other.name and self.age == other.age # 其他类型直接返回不匹配 return False
使用示例:
list_users = [Information(name='Robert', age=29), Information(name='Richard', age=33), Information(name='Carol', age=43), Information(name='Ann', age=24)] print('Robert' in list_users) # 输出 True print('David' in list_users) # 输出 False
方法二:不修改类的替代方案
如果无法改动Information类的定义,用any()函数结合生成器表达式就能快速实现判断,简洁又灵活:
# 直接一行判断 print(any(user.name == 'Robert' for user in list_users)) # 输出 True # 封装成函数复用 def check_user_exists(name, user_list): return any(u.name == name for u in user_list) print(check_user_exists('Carol', list_users)) # 输出 True
两种方案对比:
- 魔法方法方案贴合Python语法习惯,代码可读性更高;
any()方案无需修改原有类,适合无法改动类定义的场景。
内容的提问来源于stack exchange,提问作者user799825
相关产品推荐
相关产品推荐

