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

在python中查找两个向量是否相等,python,class,function,vector,python-3.x,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):

好的,这是我的课:

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))

我得到了不正确的true,因为它只查看最后一个值:“y”:1,如何检查这两个值?

您可以比较字段:

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

您可以比较以下字段:

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

您尝试实现的方法已经为您完成。可以使用“设置相等”和“字典相等”运算符。我要求您不要使一个名为
的函数等于
,而是使用允许在类实例上使用
=
\uuuuuuuuuueq

这是你能做的

def __eq__(self, anotherInst):
    return self.D == anotherInst.D and self.f == anotherInst.f
阅读中的
\uuuu eq\uuu
方法

应用更改后的测试运行-

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

您尝试实现的方法已经为您完成。可以使用“设置相等”和“字典相等”运算符。我要求您不要使一个名为
的函数等于
,而是使用允许在类实例上使用
=
\uuuuuuuuuueq

这是你能做的

def __eq__(self, anotherInst):
    return self.D == anotherInst.D and self.f == anotherInst.f
阅读中的
\uuuu eq\uuu
方法

应用更改后的测试运行-

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

我认为仅仅实现一个函数,比如
equal
,并不是最好的选择。您可以实现
\uuu eq\uuu
,以便使用
=
来识别相似性

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

我认为仅仅实现一个函数,比如
equal
,并不是最好的选择。您可以实现
\uuu eq\uuu
,以便使用
=
来识别相似性

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

因此,它不是一个代码编写服务。你试过什么?我的坏@Steve P。我现在一定要改变我的礼仪。好吧,我试过:
v=Vec({'x','y','z'},{'y':1,'x':2})
u=Vec({'x','y','z'},{'y':1,'x':0})
def equal u(u,v):“如果u等于v,则返回真值”断言u.D==v.D代表v.f中的D:u.f中的i:if v.f[D]==u.f[i]:返回True else:返回False print(等于(u,v))
我得到
True
这是不正确的,因为它只查看最后一个值:
'y':1
,我如何检查两者?编辑你的帖子,而不是在这里发表评论。所以这不是一个代码编写服务。你试过什么?我的坏@Steve P。我现在一定要改变我的礼仪。好吧,我试过:
v=Vec({'x','y','z'},{'y':1,'x':2})
u=Vec({'x','y','z'},{'y':1,'x':0})
def equal u(u,v):“如果u等于v,则返回真值”断言u.D==v.D代表v.f中的D:u.f中的i:if v.f[D]==u.f[i]:返回True else:返回False print(等于(u,v))
我得到
True
这是不正确的,因为它只查看最后一个值:
'y':1
,如何检查两者?编辑你的帖子而不是在这里发表评论。但是,如果我使用:
u=Vec({'x','y','z'},{'y':1,'x':2})
v=Vec({'x','y','z'},{'y','y','z'},{'y':1,'z':0}
我使用该方法得到
True
,但是,如果我使用:
u=Vec({'x','y','y','x','y',',{'y':1,'z':0})
我使用该方法得到
True