Python列表删除方法:如何实现?

blu*_*oot 0 python compare list

在java中,我的客户端类有"代码"attr和equals方法.方法等于接收另一个客户端并与其自身的代码attr进行比较.

在python中,我只是读到我们有__cmp__方法,和java方法一样做.好的,我做到了.我创建了我的类客户端,使用"code"attr和方法comp来验证代码是否相同.

class Client():
    def __init__(self, code):
        self.code = code

    def __cmp__(self, obj):
        return obj.code == self.code

    def __repr__(self):
        return str(self.code)
Run Code Online (Sandbox Code Playgroud)

然后我将3个Client对象放在python的列表中:

bla = [Client(1), Client(2), Client(3)]
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试:

bla.remove(Client(3))
Run Code Online (Sandbox Code Playgroud)

惊人的python删除了第一个元素(客户端代码为1).

我做错了什么?我在python的Lib文件中搜索了list的实现,但是不容易找到.

有人可以帮忙吗?

Amb*_*ber 5

http://docs.python.org/reference/datamodel.html#object.__cmp__

__cmp__(self, other)

如果没有定义丰富的比较(见上文),则通过比较操作调用.如果self <other则返回负整数,如果self == other则返回0,如果self> other则返回正整数.

基本上,你应该改变你的实现__cmp__...

def __cmp__(self, obj):
    return cmp(obj.code, self.code)
Run Code Online (Sandbox Code Playgroud)

cmp()Python 的内置函数专门用于__cmp__通过比较其两个参数来返回预期返回的值.

在Python中还有一个不同的函数__eq__,它只检查相等性,你当前的实现__cmp__更适合.