【发布时间】:2015-04-18 04:59:54
【问题描述】:
我对python(2.7)list.remove函数有点疑惑。在documentation of remove 中它说:“从列表中删除值为 x 的第一项。如果没有这样的项,则会出错。”
所以,我想这里 value 意味着比较是基于 平等(即==)而不是身份(即@987654324 @)。但是,有人可以向我解释以下行为。显然,这两种比较都被使用了,但是以一种相当奇怪的方式:
import numpy as np
x = np.array([1,2,3])
mylist = [x, 42, 'test', x] # list containing the numpy array twice
print mylist
这当然会打印出来:
[array([1, 2, 3]), 42, 'test', array([1, 2, 3])]
到目前为止一切顺利。但奇怪的是下面的代码确实执行了:
mylist.remove(x)
print mylist
给予
[42, 'test', array([1, 2, 3])]
我希望它会引发错误,因为 numpy 数组不返回布尔语句,而是返回布尔数组。
例如,x == x 返回array([ True, True, True], dtype=bool)。
然而,我们的移除愉快地执行了。但是,再次调用相同的语句会产生预测的行为:
mylist.remove(x)
抛出一个
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-835a19b5f6a9> in <module>()
----> 1 mylist.remove(x)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
发生了什么事?
【问题讨论】:
标签: python arrays list numpy equality