大家。
我遇到了一个奇怪的问题,当我尝试比较两个相同的列表时,Python (2.7) 确定它们是不同的。它们嵌入在相当大的代码体中,但这里只是其中的一小部分。
print("innersearch:",innersearch)
print("innersub:",innersub)
if (innersearch == innersub):
print("innersearch = innersub")
print("----")
不幸的是,这会返回:
innersearch: (-100.00,-0.00)
innersub: (-100.00,-0.00)
----
我知道这是一个模态问题,因为当我将 innersearch
和 innersub
替换为 (-100.00,-0.00)
时,我得到innersearch = insidesub
。感谢任何帮助,并对我缺乏知识表示歉意。
更新:
有人建议我对这些值进行四舍五入,就像它们在比较之前输出时一样,不幸的是,这没有什么帮助。
innersub = turtle.Vec2D(round(innersub[0], 2), round(innersub[1], 2))
innersearch = turtle.Vec2D(round(innersearch[0], 2), round(innersearch[1], 2))
print("innersearch:",innersearch)
print("innersub:",innersub)
if (innersearch == innersub):
print("innersearch = innersub")
print("----")
这返回了相同的结果。有什么想法吗?
最佳答案
当且仅当两个列表具有相同的长度并且第一个列表中的每个元素与第二个列表中的相应元素比较时,两个列表才被视为相等。大致是:
def lists_equals(l1, l2):
if len(l1) != len(l2):
return False
return all(a == b for (a, b) in zip(l1, l2))
需要注意的重要一点是,相等语义不会自动为自定义类定义——或者更确切地说,它们默认为标识。在没有 __eq__
方法的情况下,两个对象只有在相同对象时才会比较为相等(a == b
的行为与a是b
)。
这意味着,如果您的列表包含您自己编写的类的实例,并且您希望能够比较这些列表,则所述类必须实现 __eq__
,否则您的比较将不起作用。
关于Python:比较列表的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20291175/