我创建了一个名为 point
的类,如下所示:
class point:
def __init__(self):
self.x = 0
self.y = 0
并创建一个点
实例列表:
p1 = point()
p1.x = 1
p1.y = 1
p2 = point()
p2.x = 2
p2.y = 2
p_list = []
p_list.append(p1)
p_list.append(p2)
现在我想从列表中删除 x = 1
和 y = 1
的实例,我该怎么做?
我尝试为 point
类添加一个 __cmp__
方法,如下所示:
class point:
def __init__(self):
self.x = 0
self.y = 0
def __cmp__(self, p):
return self.x==p.x and self.y==p.y
但是下面的代码不起作用
r = point()
r.x = 1
r.y = 1
if r in p_list:
print('correct')
else:
print('wrong') # it will go here
p_list.remove(r) # it reports 'ValueError: list.remove(x): x not in list'
最佳答案
您的__cmp__
函数不正确。 __cmp__
应该根据第二个元素是否小于/等于/大于self
返回-1/0/+1
。因此,当调用 __cmp__
时,如果元素相等,它会返回 True
,然后将其解释为 1
,因此“大于” .如果元素不相等,则返回 False
,即 0
,它被解释为“相等”)。
对于二维点,“大于”和“小于”的定义不是很明确,所以你可以将你的__cmp__
替换为__eq__
使用相同的实现。您的 point
类应该是:
class point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __eq__(self, p):
return self.x==p.x and self.y==p.y
关于python - 如何删除python列表中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36360632/