我对shapely以及==
运算符的使用有疑问。存在一个测试几何对象相等性的函数:.equals()
。但是==
不起作用。
Point((0, 2)).equals(Point((0,2))
返回True。
但是:
Point((0, 2)) == Point((0, 2))
返回False
我希望能够使用==
运算符来检查列表中是否已存在Point
。一个用例可能是:
if Point not in list_of_points:
list_of_points.append(Point)
据我了解,这不起作用,因为==
会返回False
。我知道使用in
函数可以替代any()
,但我更喜欢in
关键字:
if not any(Point.equals(point) for point in list_of_points):
list_of_points.append(Point)
在__eq__
中实施shapely/geometry/base.py
需要付出很大的努力吗?
您如何看待__eq__
的这种天真实现?
class BaseGeometry(object):
def __eq__(self, other):
return self.equals(other)
或
class BaseGeometry(object):
def __eq__(self, other):
return bool(self.impl['equals'](self, other))
答案 0 :(得分:0)
实现__eq__
的一个副作用是Point不再是字典中的键。如果您需要该功能,可以添加以下内容:
def __hash__(self):
return hash(id(self))