Python numpy数组分组筛选时条件判断错误导致输出异常问题求解
代码存在的两个核心问题
- 多条件判断语法逻辑错误:你写的
if 1.1 and 1.2 and 1.3 in id是错误写法,Python会将该表达式拆解为(布尔值(1.1)) and (布尔值(1.2)) and (1.3 in id),非零浮点数的布尔值默认为True,所以只要1.3存在于输入数组中,整个判断就会通过,完全不会校验1.1、1.2是否存在,这是1分组缺了元素还被输出的直接原因。 - return语句缩进错误:当前return语句写在第5个分组的if判断代码块内部,只有当第5个分组满足条件时函数才会返回结果;如果第5个分组不满足条件,前面符合要求的分组结果也不会被正常返回。
修复后的代码
import numpy as np def removeIncomplete(id_arr): idComplete = np.array([]) # 统一预定义所有校验分组,后续修改扩展更方便 all_groups = [ (1.1,1.2,1.3), (2.1,2.2,2.3), (3.1,3.2,3.3), (4.1,4.2,4.3), (5.1,5.2,5.3) ] for group in all_groups: # 正确判断组内所有元素都存在于输入数组 if all(num in id_arr for num in group): idComplete = np.append(idComplete, group) # 所有分组校验完成后再统一返回结果 return idComplete print(removeIncomplete(np.array([1.3, 2.2, 2.3, 4.2, 5.1, 3.2, 5.3, 3.3, 2.1, 1.1, 5.2, 3.1])))
运行后输出结果为[2.1 2.2 2.3 3.1 3.2 3.3 5.1 5.2 5.3],和预期一致。
内容的提问来源于stack exchange,提问作者sedative
相关产品推荐
相关产品推荐

