Py学习  »  Python

如何从python列表中删除类对象?

DaCard • 3 年前 • 1196 次点击  

假设我有一个类(Base)&清单(obj)

class Base:
    def __init__(self, x, y):
        self.x = x 
        self.y = y 

    def __repr__(self):
        return f"Base({self.x}, {self.y})"

    def area(self):
        return self.x*self.y

obj = [Base(10, 12), Base(2, 5), Base(7, 8)]

如何从obj列表中删除基(2,5)? 这个 obj.remove(Base(2,5)) 不起作用。有什么建议吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133635
 
1196 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Prune
Reply   •   1 楼
Prune    4 年前

你眼前的问题是你做了 有一个元素叫做 Base(2, 5) 在这个列表中:你有三个对象描述符。您的呼叫 remove 不指 任何 在这三个元素中:它指的是第四个元素。是的,该元素恰好与一个列表元素具有相同的属性,但您尚未为其实现相等运算符 Base 认识到这一巧合。

蛮力方法是遍历列表并找到相应的元素:

for elem in obj:
    if (elem.x, elem.y) == (2, 5):
        obj.remove(elem)
        break
hiro protagonist
Reply   •   2 楼
hiro protagonist    4 年前

list.remove 需要能够判断何时要删除的元素与列表中的一个元素相同。

所以你可以实施 __eq__ 方法如下:

class Base:    
    def __eq__(self, other):
        if not isinstance(other, Base):
            return NotImplemented
        return self.x, self.y == other.x, other.y

obj.remove(Base(2,5)) 会有用的。