python教程,如何理解any()函数?是否适用ndarray类型?
发布于 作者:苏南大叔 来源:程序如此灵动~
python语言里面,目前已知有三套any()函数,除了自带的any(),另外两个存在于相当常用的numpy中。any()是用于判断目标类数组变量中是否含有目标变量的。具体上来说,几者之间存在着什么样的区别和联系呢?这就是本文苏南大叔要试图阐述的主要内容。

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码经验总结。本文测试环境:win10,python@3.11.0。值得特别说明的是:Python中的Null就是None,没有直接Null的表述。
any()普通检测
本文的行文侧重点是python自带的any(),numpy中的any()仅仅是做简单的对比,后续会单独成篇。any()判断一个类数组里面的成员是否全为空(0,False,None,空字符串)。这个就可以理解为or操作,有一个非空,则整体算为非空。
下面的代码显示:any()可以正确处理list/tuple/set 以及一维的ndarray。
测试代码:
_list1 = [0, False, None, ""]
_list2 = [0, False, None, "", "999"]
print(any(_list1), any(_list2)) # False,True
_tuple1 = (0, False, None, "")
_tuple2 = (0, False, None, "", "999")
print(any(_tuple1), any(_tuple2)) # False,True
_set1 = {0, False, None, ""}
_set2 = {0, False, None, "", "999"}
print(any(_set1), any(_set2)) # False,True
import numpy as np
_ndarray1 = np.array((0, False, None, ""))
_ndarray2 = np.array((0, False, None, "", "999"))
print(any(_ndarray1), any(_ndarray2)) # False,True
any()检测ndarray
然而,到了二维ndarray,any()就开始报错了。
import numpy as np
_ndarray3 = np.array([[0, False], [None, ""]])
_ndarray4 = np.array([[0, False], [None, ""], ["999", "000"]])
print(any(_ndarray3), any(_ndarray4)) # 报错报错信息如下:
Traceback (most recent call last):
File "C:\Users\sunan\Desktop\test\py\t.py", line 21, in <module>
print(any(_ndarray3), any(_ndarray4)) # 报错
^^^^^^^^^^^^^^
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()推荐使用的是:_ndarray.any(),它返回的是第一个不为空的元素。
import numpy as np
_ndarray3 = np.array([[0, False], [None, ""]])
_ndarray4 = np.array([[0, False], [None, ""], ["999", "000"]])
# print(any(_ndarray3), any(_ndarray4)) # 报错
print(_ndarray3.any()) # 空
print(_ndarray4.any()) # 999返回值是:空和999。
import numpy as np
_ndarray5 = np.array([[0, False], [True, 0]])
_ndarray6 = np.array([[0, False], [True, None]])
print(np.any(_ndarray5)) # True
print(np.any(_ndarray6)) # True返回值是:True和True。
any()检查空数组
import numpy as np
_list = []
_tuple = ()
_set = {}
_ndarray = np.array([])
print(any(_list), any(_tuple)) # False,False
print(any(_set), any(_ndarray)) # False,False对于空的类数组,any()检测是否某个元素不为空。事实上,一个元素都没有,所以必然不存在某个元素不为空了。所以,全体返回值False。
相关文章
结束语
python自带的any()函数,可以用于检测list/tuple/set 以及一维的ndarray中是否含有非空元素。这里的“空”指的是:0,False,None(Null),空字符串。Python中的None就是其它语言里面的Null。
而对于ndarray类型,自带的any()仅仅可以用于判断一维的情况。所以,推荐使用基于numpy的两个.any()做类似判断,留作后续文章连载。这里特别说一下:自带的any()和numpy的两个.any()的返回值也是不一样的。
苏南大叔的更多python精彩文章,请点击: