Python如何判断列表中是否存在指定name属性的Person对象?
实现方案
1. 单次查找最便捷写法
直接用Python内置的any()函数即可一行实现和原代码完全等价的逻辑,性能没有任何差异:
found = any(p.name == "Alan" for p in person_list)
any()会迭代传入的生成器,只要命中一个满足条件的元素就会立刻终止迭代返回True,遍历逻辑和你手写的for+break完全一致,只是语法更简洁。
2. 多次查找最优方案
如果需要频繁对这个列表做姓名存在性判断,可以提前把所有姓名存入集合,后续每次查找都是O(1)复杂度,比每次遍历列表效率高很多:
# 仅需遍历一次列表生成姓名集合 name_set = {p.name for p in person_list} # 后续每次查找都直接用in判断 found = "Alan" in name_set
3. 定制类逻辑的简化写法
如果你的业务逻辑里默认姓名相同即代表同一个Person实例,可以重写Person类的__eq__方法,后续可以直接用字符串判断是否在列表中:
class Person: def __init__(self, name): self.name = name def __eq__(self, other): # 支持和字符串、Person实例判等 if isinstance(other, str): return self.name == other if isinstance(other, Person): return self.name == other.name return False # 直接简化为判断字符串是否在列表中 found = "Alan" in person_list
注意:改类的判等逻辑前要确认不会影响其他业务中对Person实例相等性的判断,避免出现非预期的问题。
内容的提问来源于stack exchange,提问作者JRR
相关产品推荐
相关产品推荐

