项目场景:
对数组或列表中是否存在None或False进行判断
问题描述
问题报错:The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
举例:
x=['a','b','c','d']
print(None == x)
# False
x=np.array([1,2,3,4,5,6,7])
print(None == x)
# [False False False False False False False]
x=np.array([1,2,3,4,5,6,7])
print(None in x)
# False
y=[x,x,x,x] # y由数组组成
print(None in x)
# ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
原因分析:
1、None == list 返回的是布尔值True或False,可直接用于判断。
2、None ==array 则返回的是一个数组,因此无法直接判断其布尔值。
3、None in y 在判断时会逐个进行 “None ==array ” 操作,并获取其返回值,但是由于其返回值为一个包含了多个布尔值的数组(可能同时包含True和False),无法获得最终的返回值,故无法判断是否为Ture或False,因此报错。
None in [‘a’,‘b’,‘c’,‘d’] 实际返回 [False,False,False,False],然后根据返回的列表判断True或False
None in y 实际返回[np.arry([False,False,False,False]),np.arry([False,False,False,False])…],无法根据返回值判断True或False
解决方案:
1、目前能想到的只能通过遍历判断。
2、None == array 返回的是数组,但是我们发现 None in array 返回的是布尔值,可以借此判断。
3、如果要判断y中每个x是否为None,则可以用 None is array 代替。
y=[x,x,x,x]
for it in y:
it=None in it
# 或者简写:
y=[None in it for it in y]
print(all(y))
print(any(y))
# 简写到一句
print(all([None in it for it in y]))
print(any([None in it for it in y]))