如何删除python列表中的对象

前端之家收集整理的这篇文章主要介绍了如何删除python列表中的对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个名为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的实例,我该怎么做?

我尝试为类点添加__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__应返回-1 / 0/1,具体取决于第二个元素是小于/等于/大于自身.因此,当调用__cmp__时,如果元素相等则返回True,然后将其解释为1,从而“大于”.如果元素不相等,则返回False,即0,这被解释为“相等”.

对于二维点,无论如何,“大于”和“小于”都没有非常清晰地定义,因此您可以使用相同的实现将__cmp__替换为__eq__.你的观点类应该是:

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相关文章