如何对两个等长列表执行逐元素逻辑OR比较?
实现两个等长列表的逐元素逻辑OR比较
首先要明确:Python里直接用list1 or list2是对整个列表做布尔判断,非空列表都会被视为True,所以会返回第一个“为真”的列表,这就是你得到原列表的原因——这种写法根本没做逐元素的比较。
下面是几种可行的实现方式:
列表推导式+zip(Python原生基础方法)
用zip()把两个列表的对应元素配对,然后对每一对执行逻辑OR判断(因为你的元素是0/1,用位运算符|和逻辑or效果完全一致):list1 = [0,0,1,1,0] list2 = [1,1,0,1,0] result = [a | b for a, b in zip(list1, list2)] # 也可以用更直观的逻辑判断写法: # result = [1 if a or b else 0 for a, b in zip(list1, list2)] print(result) # 输出: [1,1,1,1,0]numpy库(适合大规模数据场景)
如果需要处理超长列表,numpy的向量化操作效率更高:import numpy as np list1 = [0,0,1,1,0] list2 = [1,1,0,1,0] arr1 = np.array(list1) arr2 = np.array(list2) result = (arr1 | arr2).tolist() print(result) # 输出: [1,1,1,1,0]
如果你的列表元素不是0/1而是布尔值True/False,上述两种方法依然适用;要是需要将布尔结果转回0/1,只需在推导式或numpy操作里做一步转换即可。
内容的提问来源于stack exchange,提问作者Lereu
相关产品推荐
相关产品推荐

