Python 如何比较涉及列表的两个元组的相等性

Python 如何比较涉及列表的两个元组的相等性,python,numpy,unit-testing,Python,Numpy,Unit Testing,找到了,但没有解决我的问题 我希望通过将两个元组作为一个整体进行比较来执行单元测试,而不是按元素进行比较。 元组包含int和boolean列表。清单的长度因我的实际情况而异。为了简单起见,为了演示,我将列表的长度固定为2。 我想单元测试的函数给出的输出格式如下: A = some_function(input) where $ some_function(input) > (array([ True, True]), array([ True, False]), 2) 我试图通过创建B

找到了,但没有解决我的问题

我希望通过将两个元组作为一个整体进行比较来执行单元测试,而不是按元素进行比较。 元组包含int和boolean列表。清单的长度因我的实际情况而异。为了简单起见,为了演示,我将列表的长度固定为2。 我想单元测试的函数给出的输出格式如下:

A = some_function(input)
where 
$ some_function(input)
> (array([ True, True]), array([ True, False]), 2)
我试图通过创建B来对A进行单元测试,如下所示:

B = (np.array([True, True]), np.array([True, False]), 2)
我尝试了以下方法,但都返回False,而不是我所期望的True。为什么?我怎样才能修好它

np.array_equal(A,B) 
> False 
A==B
>ValueError回溯(最近一次调用上次)
在里面
1 A=\u令牌方式\u到实体方式(参考,hyp)
---->2b==(np.array([True,True]),np.array([True,False]),2)
3.
4 A==B
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

我还不能评论,但是上面的答案应该有用

或者您可以创建一个可重用的函数

def equality_check(A, B):
    X = True
    if A==B:
        X = True
    else:
        X = False
    return X
然后你就可以跑了

print(equality_check(A, B))
在任何变量、列表、数组、元组等上

或者,您可以创建布尔对象作为

x = equality_check(A, B)
print(x)
这允许您存储该布尔值以供以后使用

希望这有帮助

>>> a
(array([ True,  True]), array([ True, False]), 2)
>>> b
(array([ True,  True]), array([ True, False]), 2)
>>> a==b
Traceback (most recent call last):
  File "<pyshell#75>", line 1, in <module>
    a==b
ValueError: The truth value of an array with more than one element is ambiguous. Use  a.any() or a.all()
如错误消息所述,这可能是不明确的。如果搜索
,则包含多个元素的数组的真值是不明确的。使用a.any()或a.all()
你会发现许多问答

>>> bool(a[0]==b[0])
Traceback (most recent call last):
  File "<pyshell#78>", line 1, in <module>
    bool(a[0]==b[0])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> 

我得想一想是否有更好的方法。

a==B到底有什么问题?顺便说一下,这些是元组,不是数组。我不能复制
np。数组等于(a,B)
np数组等于(a,B)
返回
False
。我得到了
正确的
>>> a
(array([ True,  True]), array([ True, False]), 2)
>>> b
(array([ True,  True]), array([ True, False]), 2)
>>> a==b
Traceback (most recent call last):
  File "<pyshell#75>", line 1, in <module>
    a==b
ValueError: The truth value of an array with more than one element is ambiguous. Use  a.any() or a.all()
>>> a[0]==b[0]
array([ True,  True])
>>> 
>>> bool(a[0]==b[0])
Traceback (most recent call last):
  File "<pyshell#78>", line 1, in <module>
    bool(a[0]==b[0])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> 
>>> all(np.all(x==y) for x,y in zip(a,b))
True
>>> #or
>>> any(map(np.all,zip(a,b)))
True
>>>