所以我有这个列表(Sheep 是我创建的一个类,需要一个参数):

list = [Sheep(2), Sheep(3), Sheep(3), Sheep(4), Sheep(4), Sheep(4), Sheep(5), Sheep(5), Sheep(5), Sheep(5), Sheep(6), Sheep(6), Sheep(6), Sheep(7), Sheep(7), Sheep(8)]

但是,当我尝试从列表中删除 Sheep(2) ( list.remove(Sheep(2) ) 时,它返回 ValueError: list.remove(x): x not in list
我该如何解决?

最佳答案

要使用自定义类测试 Python 列表中的成员资格,您必须提供一个相等 ( __eq__ ) 方法

class Sheep:

    def __init__(self, x):
        self.x = x

    def __eq__(self, other):
        assert isinstance(other, Sheep)
        return self.x == other.x

现在您可以使用相同的“x”创建类的实例,它们将成为您的列表的成员
foo = [Sheep(2), Sheep(3), Sheep(3), Sheep(4), Sheep(4), Sheep(4), Sheep(5), Sheep(5), Sheep(5), Sheep(5), Sheep(6), Sheep(6), Sheep(6), Sheep(7), Sheep(7), Sheep(8)]
print(Sheep(2) in foo)  # True

你也应该能够删除它们
foo.remove(Sheep(2))
print(foo)  # [Sheep(3), Sheep(3), Sheep(4), Sheep(4), Sheep(4), Sheep(5), Sheep(5), Sheep(5), Sheep(5), Sheep(6), Sheep(6), Sheep(6), Sheep(7), Sheep(7), Sheep(8)]

关于python - 我无法从列表中删除类对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59597584/

10-09 19:40