列表python中的对象比较,带有索引值

时间:2019-01-22 18:00:38

标签: python list object

让我说我上课

class Foo:
    def __init__(self, item1, item2):
        self.item1 = item1
        self.item2 = item2

以及该类的对象列表

object1 = Foo (1,2)  
object2 = Foo (1,2)
object3 = Foo (1,3)
objectlist = [object1, object3]

我想知道具有相同项目的object2是否在objectlist列表中,之后我想获取它的索引。在这种情况下,索引为0。

我可以通过

def __eq__ (self, other):
    return (self.item1 == other.item1) and (self.item2 == other.item2)

还有一个for循环。因为我可以逐个检查每个索引,并获得等于该对象的索引。但是我可以用更卑鄙的方式做到这一点吗?

2 个答案:

答案 0 :(得分:3)

怎么样?

class Foo:
    def __init__(self, item1, item2):
        self.item1 = item1
        self.item2 = item2


    def __eq__ (self, other):
        return (self.item1 == other.item1) and (self.item2 == other.item2)

object1 = Foo (1,2)  
object2 = Foo (1,2)
object3 = Foo (1,3)
objectlist = [object1, object3]

try:
    index_value = objectlist.index(object2)
    print(index_value)
except ValueError:
    index_value = -1
    print(index_value)

答案 1 :(得分:0)

问题是,您是否要区分不同的对象,但包含相同值的item1item2

如果是,则不必检查对象的内容。而是依靠类的每个实例的不同标识符(id(obj)

object2 in objectlist

如果没有,那么您的方法(几乎)是正确的方法,我不知道有任何更好的方法。在您的情况下,您不是严格检查两个对象的类是否相同,而是-它们在结构上是相同的(即它们具有相同的成员item1item2

您可能还想查看以下问题的答案:Compare object instances for equality by their attributes in Python