【问题标题】:Accessing class variables from within a list without using for loop?在不使用 for 循环的情况下从列表中访问类变量?
【发布时间】:2015-09-09 23:21:27
【问题描述】:

我有一个具有两个值 x 和 y 的类对象列表。这是我当前从列表中获取单个对象的代码:

for object in object_list:
    if object.x == 10 and object.y == 10:
        current_object = object
        break

然后我可以通过引用 current_object 对对象进行操作。但是,我的问题是该列表包含 2000 个类对象条目,我担心像这样遍历列表直到找到所需的对象会非常低效。

有没有更有效的方法来获取我请求的对象?

【问题讨论】:

  • 您考虑过使用dictionaries 吗?它可以满足您的需求吗?
  • 使用字典,其键是每个对应对象的对(元组)xy。由于字典比列表具有更好的搜索时间复杂度...
  • 考虑为dict 再次投票;具体来说,映射{(foo.x, foo.y): foo, ...}。另外,不要为自己的对象命名object...

标签: python list class python-3.x


【解决方案1】:

如果您要一次又一次地进行查找,那么您可以将列表转换为字典,就像这样

lookup = {(obj.x, obj.y): object for obj in object_list}

这将创建一个字典,其键是来自对象的 xy 值的元组。

现在,您可以像这样简单地进行查找

lookup[(x_value, y_value)]

或者如果你想在字典中找不到键的情况下返回一个默认值,那么你可以使用dictionary.get,像这样

lookup.get((x_value, y_value), None)

如果在字典中找不到键,这不会抛出KeyError,而是返回None

有没有更有效的方法来获取我请求的对象?

上面建议的字典方法会非常快,因为字典查找可以在恒定时间内发生(因为它们内部使用哈希表),但是搜索列表将是线性时间复杂度(我们需要迭代列表并检查元素一个一个)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2021-03-17
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多