python - 如何删除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 = 1y = 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/

相关文章:

python - 当我想要基于百分比的值时,我的 MAPE(平均绝对百分比误差)函数返回超过 100 的数字

python - 使用 .read() 从文件对象中提取文本

python - 使用 for 循环在列表或数组中分配键值

python - 相对导入和目录结构(万亿次)

python - os.system(/sbin/shutdown -r now) 先执行后写入

python - 计算合并字符串的分数

python - 初始化任意形状的嵌套列表

python - 错误: command 'gpg' failed with exit status 2 when create a dist of Sphinx python package

python - 作业分配中的递归错误。寻求建议

python - 如何在 Tensorflow 中设置分层学习率?