Moar noob Python问题
我有一个NumPy数组列表,想测试两个数组是否在里面。控制台日志:
>>> theArray
[array([[[213, 742]]], dtype=int32), array([[[127, 740]],
[[127, 741]],
[[128, 742]],
[[127, 741]]], dtype=int32)]
>>> pair[0]
array([[[213, 742]]], dtype=int32)
>>> pair[1]
array([[[124, 736]]], dtype=int32)
>>> pair[0] in theArray
True
>>> pair[1] in theArray
Traceback (most recent call last):
File "...\pydevd_exec2.py", line 3, in Exec
exec(exp, global_vars, local_vars)
File "<input>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
pair[0]
和pair[1]
根据调试器(内容除外)似乎具有完全相似的特征。那么这两种情况有何不同?为什么第二个失败而第一个失败呢?
答案 0 :(得分:2)
在这里使用in
是一个错误。
theArray
不是一个数组。这是一个清单。列表in
假设==
是其元素的等价关系,但==
不是NumPy数组的等价关系;它甚至不返回布尔值。在这里使用in
基本上没有意义。
使theArray
数组不会有帮助,因为数组的in
会生成basically no sense。
pair[0] in theArray
碰巧没有引发异常。列表在is
==
之前尝试进行in
比较,而pair[0]
碰巧与theArray
的第一个元素完全相同,因此列表从不开始尝试==
并对其返回值感到困惑。
如果要检查特定对象obj
是否是列表l
的元素之一(而不仅仅是==
- 相当于其中一个元素,但实际上是该对象),使用any(obj is element for element in l)
。
如果你想检查NumPy数组是否等于&#34;在具有相同形状和相同元素的意义上的数组列表中的数组中,使用any(numpy.array_equal(obj, element) for element in l)
。
答案 1 :(得分:0)
我得到了成功和失败案例的ValueError。
正如@ user2357112所说,问题是列表的元素是numpy数组,所以'in'取决于的==比较不起作用
但您可以使用以下结构:
service.users().labels().list(userId=user_id)\
.execute(http=self.__get_credentials().authorize(httplib2.Http()))