麻木的错误?(python3)

import numpy as np

mainList = []

numpyArray0 = np.array([1,2,3])

numpyArray1 = np.array([4,5,6])

mainList.append(numpyArray0)

mainList.append(numpyArray1)


print("numpyArray0 in mainList:")

try:

  print(numpyArray0 in mainList)

except ValueError:

  print("ValueError")


print("numpyArray1 in mainList:")

try:

  print(numpyArray1 in mainList)

except ValueError:

  print("ValueError")


print("mainList in numpyArray0:")

try:

  print(mainList in numpyArray0)

except ValueError:

  print("ValueError")


print("mainList in numpyArray1:")

try:

  print(mainList in numpyArray1)

except ValueError:

  print("ValueError")


print(numpyArray1 in mainList)

所以我上面的代码基本上是在一个普通的python列表(mainList)内创建2个numpy数组,然后检查这些2个数组是否在列表内。代码应该输出:


numpyArray0 in mainList:

True

numpyArray1 in mainList:

**True**

mainList in numpyArray0:

True

mainList in numpyArray1:

True

**True**

但不是输出上述内容,而是输出以下内容:


numpyArray0 in mainList:

True

numpyArray1 in mainList:

ValueError

mainList in numpyArray0:

True

mainList in numpyArray1:

True

Traceback (most recent call last):

  File "/home/user/Documents/pythonCode/temp.py", line 31, in <module>

    print(numpyArray1 in mainList)

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我做错了什么吗?请注意,我在运行代码之前尝试更新 python、numpy 和我的操作系统(debian)。


杨__羊羊
浏览 524回答 3
3回答

qq_遁去的一_1

看起来这是一个众所周知的特性,与==Numpy 数组的运算符重载方式有关。

繁星淼淼

numpyArray0 in mainList调用list.__contains__。列表的__contains__方法调用列表的PyObject_RichCompareBool每个元素来检查元素是否相等。碰巧的是,首先PyObject_RichCompareBool检查身份相等性,然后进行全面比较。numpyArray0 is mainList[0]返回True,因此永远不会进行完全比较。如果完成了完全比较,numpy则会引发,ValueError因为numpy数组不能被解释为布尔值。numpyArray1 in mainList也显示了这一点(因为numpyArray1vs 的身份比较失败了mainList[0]。

宝慕林4294392

这里的要点:>>> numpyArray1 in mainList....&nbsp; &nbsp;&nbsp;ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()这将工作:>>> any([list(numpyArray1) == list(litem)&nbsp; for litem in mainList])True
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python