Python中比较两个不同对象列表的User属性问题
问题解决思路
首先,你的现有代码存在两个明显问题:
user.id in list_user2逻辑错误:list_user2是 User 对象列表,不是 id 集合,直接判断 id 是否在列表里永远返回 Falseuser.time > list_user2完全不合理:整数和列表无法做大小比较
要实现需求且保证性能,最优方案是把第二个列表转成以 id 为键的字典,这样查找同 id 的 User 对象时间复杂度是 O(1),比嵌套遍历两个列表的 O(n*m) 高效得多。
修正后的代码
class User: def __init__(self, id: str, time: int) -> None: self.id = id self.time = time def __eq__(self, __o: object) -> bool: return self.id == __o.id list_user = [User("1", 20), User("2", 20), User("3", 45)] list_user2 = [User("1", 5), User("4323", 20), User("3", 60)] # 把list_user2转成字典,用id做键,快速查找 user2_map = {user.id: user for user in list_user2} for user in list_user: # 获取同id的User对象,不存在则返回None matched_user = user2_map.get(user.id) if matched_user and user.time > matched_user.time: do_something() # 这里执行你的业务逻辑
额外说明
- 注意 id 的类型一致性:你的
__init__里 id 定义为str类型,但示例中传的是整数,建议统一类型(比如都转成字符串),避免因为类型不匹配导致查找失败 - 字典转换只需要做一次,放在循环外面,不会影响性能
- 如果
list_user2里存在多个同 id 的 User 对象,字典会保留最后一个,如果你需要处理这种情况,可以把字典的值改成列表,存储所有同 id 的对象,再逐个对比时间
内容的提问来源于stack exchange,提问作者bakelue
相关产品推荐
相关产品推荐

