所以我有一个问题要解决(概述如下)。这个问题使用了一个有两个成员变量的类(Vec)。 v.D是指向量域中的元素,而v.f是指映射域元素的字典。
例如,如果v = Vec({'x','y','z'},{'y':1,'x':2})则vD = {'x','y' ,'z'}和vf = {'y':1,x:'2'}。如果v.D的元素没有出现在v.f中,则假定域的元素被映射为零(即'z':0出现在v.D中,但仅假设为v.f)。
问题建议我使用all()属性,但我似乎无法使其工作。我在下面包含两个解决方案(两个都不起作用)。我遇到的主要问题是当v.D的元素没有出现在v.f
中时,测试是否相等`
def equal(u,v):
“”” 如果u等于v(其中u和v是类vec()的成员),则返回true。 由于稀疏表示(域映射到零),仅比较字典
是不够的>>> Vec({'a', 'b', 'c'}, {'a':0}) == Vec({'a', 'b', 'c'}, {'b':0})
True
Be sure that equal(u, v) check equalities for all keys from u.f and v.f even if
some keys in u.f do not exist in v.f (or vice versa)
>>> Vec({'x','y','z'},{'y':1,'x':2}) == Vec({'x','y','z'},{'y':1,'z':0})
False
>>> Vec({'a','b','c'}, {'a':0,'c':1}) == Vec({'a','b','c'}, {'a':0,'c':1,'b':4})
False
>>> Vec({'a','b','c'}, {'a':0,'c':1,'b':4}) == Vec({'a','b','c'}, {'a':0,'c':1})
False
The keys matter:
>>> Vec({'a','b'},{'a':1}) == Vec({'a','b'},{'b':1})
False
The values matter:
>>> Vec({'a','b'},{'a':1}) == Vec({'a','b'},{'a':2})
False
"""
assert u.D == v.D
for k in v.D:
if k in v.f and k in u.f:
return v.f[k] == u.f[k]
all(v.f [i] == u.f [i] for i in v.D)
答案 0 :(得分:4)
我会这样做:
def equal(u, v):
if u.D != v.D: return False # domains must be equal
return all(u.f.get(x, 0) == v.f.get(x, 0) for x in u.D)
这个明显的解决方案有什么问题吗?