有没有办法找到保存在列表中的对象,只知道它的参数而没有遍历所述列表?
例如,有一个类,其对象具有(x; y)坐标,并且没有任何对象共享相同的坐标(所有x / y对都是不同的,不是重复)。这些对象都保存在列表中:
class Point():
def __init__(self, x, y):
self.x = x
self.y = y
points = [Point(...), Point(...), Point(...), Point(...), ...]
每当我需要特定的实例时,有没有办法找到它(这里:它在列表中的索引)只使用它的坐标而不遍历整个列表,如下所示:
def find_objects_index(x, y):
for i in range(len(points)):
if points[i].x == x and points[i].y == y:
return i
编辑:访问这些Point()
是为了写作,而不是阅读,因此object.x
和object.y
会改变,你可以&#39 ;只需创建一个以(object.x, object.y)
为键的字典 - 您需要添加新条目并每次删除旧条目。
答案 0 :(得分:2)
您可以使用带条件的列表聚合来获取您要查找的项目:
matching = [p for p in points if p.x = VALX and p.y == VALX]
但是,在这种情况下,以(x,y)为键的字典很可能是正确的(并且表现良好)。
答案 1 :(得分:1)
只需将Points
放入dict()
:
class Point():
def __init__(self, x, y):
self.x = x
self.y = y
points_list = [Point(...), Point(...), Point(...), Point(...), ...]
points_dict = {(p.x,p.y):p for p in points_list}
def find_object(x, y):
if (x,y) in points_dict:
return points_dict[(x,y)]
def replace_object(x, y, new_point):
points_dict.pop((x, y), None)
points_dict[(new_point.x, new_point.y)] = new_point
答案 2 :(得分:1)
有没有办法找到保存在列表中的对象,只知道它 参数并没有遍历上述列表?
简短回答:不。
如果您想要或需要快速遍历这样的数据点集合,也许您应该考虑使用除列表之外的类型 - 例如基于x或y数据的二叉树(或者如果您需要跟踪它们分开,也许每棵树一个?)