纽比虫?(Python3)

2024-05-21 04:36:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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个数组是否在列表中。代码应输出:

^{pr2}$

但它没有输出上述内容,而是输出以下内容:

^{3}$

我做错事了吗? 请注意,在运行代码之前,我尝试过更新python、numpy和我的os(debian)。在


Tags: 代码innumpy列表np数组arrayprint
3条回答

看起来它是一个well-known feature与Numpy数组的==运算符重载方式有关。在

要点如下:

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

这将起作用:

^{pr2}$

True

numpyArray0 in mainList调用list.__contains__。列表的__contains__方法为列表的每个元素调用PyObject_RichCompareBool,以检查元素是否相等。碰巧,^{}首先检查标识是否相等,然后进行完全比较。在

numpyArray0 is mainList[0]返回True,因此不会进行完全比较。如果进行了完全比较,numpy将引发ValueError,因为numpy数组不能被互斥为布尔值。在

numpyArray1 in mainList也显示了这一点(因为numpyArray1mainList[0]的身份比较失败。在

相关问题 更多 >