如何删除python列表中的对象
发布时间:2020-12-16 22:55:30 所属栏目:Python 来源:网络整理
导读:我创建了一个名为point的类,如下所示: class point: def __init__(self): self.x = 0 self.y = 0 并创建一个点实例列表: p1 = point()p1.x = 1p1.y = 1p2 = point()p2.x = 2p2.y = 2p_list = []p_list.append(p1)p_list.append(p2) 现在我想从列表中删除x
我创建了一个名为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__替换为 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |