Python 如何比较涉及列表的两个元组的相等性
找到了,但没有解决我的问题 我希望通过将两个元组作为一个整体进行比较来执行单元测试,而不是按元素进行比较。 元组包含int和boolean列表。清单的长度因我的实际情况而异。为了简单起见,为了演示,我将列表的长度固定为2。 我想单元测试的函数给出的输出格式如下: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
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
>>>