【问题标题】:Find if 2 vectors are equal in python在python中查找2个向量是否相等
【发布时间】:2013-07-09 17:11:45
【问题描述】:

好的,这是我的课:

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,我如何检查两者?

【问题讨论】:

  • SO 不是代码编写服务。你试过什么?
  • 我的坏@Steve P。我现在一定要改变我的礼仪。
  • 好的,我试过这个: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,我该如何检查两者兼得?
  • 编辑您的帖子,而不是在这里发表评论。

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


【解决方案1】:

您尝试实施的方法已经为您完成。您可以使用集合相等和字典相等运算符。我要求您不要创建一个名为 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

【讨论】:

    【解决方案2】:

    您可以比较字段:

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

    【讨论】:

    • 但是,如果我使用:u = Vec({'x','y','z'},{'y':1,'x':2}) v = Vec({'x','y','z'},{'y':1,'z':0}) 我使用该方法得到True
    【解决方案3】:

    我认为仅仅实现一个诸如equal 之类的函数并不是最好的选择。您可以实现__eq__,这样您就可以使用== 来识别相似度。

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

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2023-01-19
      • 2021-12-30
      • 2022-12-10
      相关资源
      最近更新 更多