检查列表中的对象是否具有相同的VALUE

时间:2018-11-28 16:24:53

标签: python python-3.x

我有一些复杂对象的Python列表,还有一个目标对象,我希望根据值在列表中检查它的出现。

换句话说,我需要查找列表中的任何对象是否具有与目标对象相同的属性和相同的值。

我尝试过:

if node in nodes:

但这会比较对象的引用而不是值。

我知道我可以做一些嵌套循环来检查每个属性,但是我正在寻找一种更聪明的方法。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以定义Node类的__eq__方法来将有趣的属性与其他节点进行比较:

class Node:
    def __init__(self, val1, val2):
        self.val1 = val1
        self.val2 = val2

    def __eq__(self, other):
        return self.val1 == other.val1 and self.val2 == other.val2


nodes = [Node(1, 2), Node(3, 4), Node(5, 6)]
node = Node(1, 2)
print(node in nodes) # True

如果由于担心破坏旧行为而不想编写__eq__方法,则可以编写仅检查某些属性然后使用any的自定义相等方法。例如:

def val1s_equal(n1, n2):
    return n1.val1 == n2.val1

if any(val1s_equal(node, n) for n in nodes):
    print('do something')