np.all()未执行问题咨询:全零数组判断为何无输出?
问题解答
嘿,我来帮你捋清楚这个问题!你确实踩了一个容易忽略的小细节——你定义的a是普通Python列表,不是numpy数组,这导致np.all(a==0)的结果和你预期的不一样。
问题根源
当你执行a == 0时,这里的a是[0,0,0]这个Python列表,Python会直接把整个列表和整数0做比较。因为列表和整数是完全不同类型的对象,这个比较的结果直接是False。然后np.all(False)自然返回False,所以if条件不成立,也就不会执行print语句了。
两种修正方案
方案1:把列表转换成numpy数组
这是最贴合你原本思路的做法,只需要把a定义为numpy数组即可:
import numpy as np a = np.array([0,0,0]) # 转换成numpy数组 if np.all(a == 0): print('All are zeros!')
此时a == 0会返回一个布尔numpy数组array([True, True, True]),np.all()会检查所有元素是否为True,最终返回True,触发打印。
方案2:用Python内置方法判断(无需numpy)
如果你不需要numpy的其他功能,直接用Python内置的all()函数配合生成器表达式也能实现需求:
a = [0,0,0] if all(x == 0 for x in a): # 逐个检查列表元素是否为0 print('All are zeros!')
内容的提问来源于stack exchange,提问作者Steven Chan
相关产品推荐
相关产品推荐

