在python中查找2个向量是否相等

时间:2013-07-09 17:11:46

标签: python class function vector python-3.x

好的,这是我的班级:

class Vec:
"""
A vector has two fields:
D - the domain (a set)
f - a dictionary mapping (some) domain elements to field elements
    elements of D not appearing in f are implicitly mapped to zero
"""
def __init__(self, labels, function):
    self.D = labels
    self.f = function

我需要帮助创建一个带有两个向量的函数,比如说:

u = Vec({'a','b','c'}, {'a':0,'c':1,'b':4})
v = Vec({'A','B','C'},{'A':1})

功能相等:

equal(u,v)

应该返回:

false

到目前为止,我已经尝试过这个:

v = Vec({'x','y','z'},{'y':1,'x':2})
u = Vec({'x','y','z'},{'y':1,'x':0})

def equal(u,v): 
    "Returns true iff u is equal to v" 
    assert u.D == v.D
    for d in v.f:
        for i in u.f:
            if v.f[d] == u.f[i]:
                return True 
            else:
                return False
print (equal(u,v))

我认为这是不正确的,因为它只是查看最后一个值:'y':1,我该如何检查它们?

3 个答案:

答案 0 :(得分:3)

您尝试实施的方法已经为您完成。您可以使用set equality和字典相等运算符。我请你不要创建一个名为equal的函数,而是使用__eq__,它允许在类实例上使用==

这是你可以做的事情

def __eq__(self, anotherInst):
    return self.D == anotherInst.D and self.f == anotherInst.f

了解Python Docs

中的__eq__方法

应用更改后测试运行 -

>>> u = Vec({'a','b','c'}, {'a':0,'c':1,'b':4})
>>> v = Vec({'A','B','C'},{'A':1})
>>> u == v
False

答案 1 :(得分:1)

您可以比较字段:

def equal(self, u, v):
    return u.D == v.D and u.f == v.f

答案 2 :(得分:1)

我认为只实现equal这样的功能不是最好的选择。您可以实施__eq__,以便使用==来识别相似性。

def __eq__(self, v):
    return self.D == v.D and self.f == v.f