Python 从列表中访问类变量而不使用for循环?

Python 从列表中访问类变量而不使用for循环?,python,list,class,python-3.x,Python,List,Class,Python 3.x,我有一个类对象列表,它们有两个值,x和y。这是我从列表中获取单个对象的当前代码: for object in object_list: if object.x == 10 and object.y == 10: current_object = object break 然后我可以通过引用当前的对象对对象进行操作。然而,我的问题是列表包含2000个类对象条目,我担心这样迭代列表直到找到所需的对象是非常低效的 有没有更有效的方法让我获取请求的对象?如果你要

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

for object in object_list:
    if object.x == 10 and object.y == 10:
        current_object = object
        break
然后我可以通过引用当前的对象对对象进行操作。然而,我的问题是列表包含2000个类对象条目,我担心这样迭代列表直到找到所需的对象是非常低效的


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

如果你要一次又一次地查找,那么你可以将列表变成字典,如下所示

lookup = {(obj.x, obj.y): object for obj in object_list}
lookup[(x_value, y_value)]
lookup.get((x_value, y_value), None)
这将创建一个字典,其中键是对象中
x
y
值的元组

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

lookup = {(obj.x, obj.y): object for obj in object_list}
lookup[(x_value, y_value)]
lookup.get((x_value, y_value), None)
或者,如果希望在字典中找不到键时返回默认值,则可以使用
字典

lookup = {(obj.x, obj.y): object for obj in object_list}
lookup[(x_value, y_value)]
lookup.get((x_value, y_value), None)
如果在字典中找不到键,则不会抛出
键错误
,但会返回
None

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


上面建议的dictionary方法将非常快,因为dictionary查找可以在固定时间内进行(因为它们内部使用哈希表),但搜索列表将具有线性时间复杂性(我们需要迭代列表并逐个检查元素)。

您考虑过使用吗?它能满足你的需要吗?使用字典,字典的关键是每个对应对象的成对(元组)
x
y
。由于字典比列表有更好的时间复杂度搜索…考虑这是另一个对代码< > DITT < /代码>的投票;具体来说,映射
{(foo.x,foo.y):foo,…}
。另外,不要给自己的对象命名
object
。。。