Python中如何比较同形状数组的不等性?如判断数组全元素大于另一数组
在Python中比较数组/列表的大小关系
嘿,我来帮你搞定Python里数组/列表的大小比较问题!看你的例子用了NumPy数组,那我先从最常用的NumPy场景说起,再补充普通列表的处理方式。
一、用NumPy数组的情况(推荐处理数值型数组)
NumPy对数组比较做了原生支持,完全不用自己写复杂的循环,用常规的比较运算符就行:
逐元素对比:直接用
>、<、>=、<=这些运算符,会返回一个和原数组形状一模一样的布尔数组,每个位置对应两个数组元素的比较结果。
比如你给的例子:import numpy as np a = np.array([[1, 2, 3]]) b = np.array([[4, 5, 6]]) # 逐元素看b的元素是不是比a大 elementwise_check = b > a print(elementwise_check) # 输出 [[ True True True]]判断所有元素都满足大小关系:如果要确认每一个元素都符合b大于a的要求,就用
np.all()把逐元素的结果包起来,它会检查布尔数组里所有值是不是都是True,最后返回一个单一的布尔值。
代码示例:all_b_greater = np.all(b > a) print(all_b_greater) # 输出 True要是你想判断至少有一个元素满足条件,就换成
np.any(),比如np.any(b > a)会返回True,只要存在一个b元素比a对应位置大。
二、用普通Python列表的情况
普通列表可不能直接用>比较哦——直接比的话,Python会按字典序来判断(比如先比第一个元素,第一个相等再比第二个),不是你要的逐元素对比。这时候得手动遍历元素,结合内置的all()函数来实现:
一维列表:
a_list = [1, 2, 3] b_list = [4, 5, 6] all_greater = all(b_elem > a_elem for a_elem, b_elem in zip(a_list, b_list)) print(all_greater) # 输出 True二维列表:
就得嵌套遍历每一行和每个元素了:a_list = [[1, 2, 3], [7, 8, 9]] b_list = [[4, 5, 6], [10, 11, 12]] all_greater = all( all(b_elem > a_elem for a_elem, b_elem in zip(a_row, b_row)) for a_row, b_row in zip(a_list, b_list) ) print(all_greater) # 输出 True这里要注意:
zip()会按最短的列表/子列表来配对,所以必须保证两个列表的形状完全一致(行数、每行的元素数都相同),不然结果会不准确。
内容的提问来源于stack exchange,提问作者shining2014
相关产品推荐
相关产品推荐

