python教程,如何理解all()函数?元素是否全部非空?
发布于 作者:苏南大叔 来源:程序如此灵动~
python代码中,all()函数和any()非常类似。all()是用于判断,类数组变量中的所有元素,是否全部非空。“空”的范围是:0,False,None(Null),空字符串。全部非空,返回True,否则返回False。

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