You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中比较两个不同对象列表的User属性问题

问题解决思路

首先,你的现有代码存在两个明显问题:

  • user.id in list_user2 逻辑错误:list_user2 是 User 对象列表,不是 id 集合,直接判断 id 是否在列表里永远返回 False
  • user.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()  # 这里执行你的业务逻辑

额外说明

  1. 注意 id 的类型一致性:你的 __init__ 里 id 定义为 str 类型,但示例中传的是整数,建议统一类型(比如都转成字符串),避免因为类型不匹配导致查找失败
  2. 字典转换只需要做一次,放在循环外面,不会影响性能
  3. 如果 list_user2 里存在多个同 id 的 User 对象,字典会保留最后一个,如果你需要处理这种情况,可以把字典的值改成列表,存储所有同 id 的对象,再逐个对比时间

内容的提问来源于stack exchange,提问作者bakelue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:05:24