什么是python列表索引解释?

时间:2016-11-19 20:52:01

标签: python list python-2.x

以下是我的代码的一部分:

some_item = target_item
first_item = my_list[0]
print first_item
print some_item
print my_list.index(first_item)
print my_list.index(some_item)
print "Finished"
exit()

这就是我得到的:

<models.adb.ADB object at 0x7f1ec7654b50>
<models.seb.SEB object at 0x7f1ec7654b90>
0
0
Finished

my_list中的我的项目是类对象。

有人可以解释一下这种行为吗?

1 个答案:

答案 0 :(得分:1)

这取决于为ADBSEB实施的比较,可能是通过为此类实施__eq__运算符。

当python在列表中查找first_itemsome_item的实例时,他将使用此运算符来确定列表中的i - 元素是否为此元素,扫描每i

因此,如果实现类似

class Parent:
    def __init__(self):
        self.x = 0
    def __eq__(parentObj):
        return self.x == parentObj.x

class ADB (Parent):
   def __init__(self): super.__init__()

class SEB (Parent):
   def __init__(self): super.__init__()

它会导致ADB() == SEB(),因此导致对象同时“匹配”#34;与它进行比较时的第一个列表元素,但同时是不同的对象。

请注意,同样可以这样做,使用继承来简化示例。

class ADB (Parent):
    def __init__(self):
        self.x = 0
    def __eq__(obj):
        return self.x == obj.x

class SEB (Parent):
    def __init__(self):
        self.x = 0
    def __eq__(obj):
        return self.x == obj.x