Python数组阈值检查问题:为何条件满足却未输出预期结果?
问题:检查数组是否存在大于阈值元素时if语句失效的原因
你想要检查数组中是否存在大于100的元素,满足条件时打印'yes',但当前代码里的if语句即便数组中有符合条件的元素,也不会输出'yes',问题出在all()函数的使用上:
核心原因
all(i>=100 for i in data_np) 这个条件要求数组里的每一个元素都大于等于100才会返回True,而你的需求是只要有至少一个元素大于等于100就触发操作,两者逻辑完全相反。
修正方案
把all()替换为any(),any()会在迭代对象中存在至少一个True值时返回True,刚好匹配你的需求:
import random import numpy as np data = [] for i in range(0,10): val = random.randint(0,110) data.append(val) data_np = np.array(data) # 替换all为any if any(i>=100 for i in data_np): print('yes') print(data_np)
更高效的numpy写法
既然已经用了numpy数组,推荐直接使用numpy原生的向量化操作,比Python生成器表达式更高效:
if (data_np >= 100).any(): print('yes')
这里data_np >= 100会生成一个布尔数组,再调用.any()就能快速判断是否存在满足条件的元素。
内容的提问来源于stack exchange,提问作者user16593576
相关产品推荐
相关产品推荐

