为何用l1 or l2无法实现列表逐元素逻辑或?求解析
为什么
l1 or l2无法实现列表元素级的逻辑或? 核心原因:Python的or是对象级布尔判断,不是元素级操作
在Python里,or运算符的作用是判断整个对象的布尔真值,而非对两个列表的对应元素逐一做逻辑或:
- 列表的布尔真值规则:只要列表不是空的,不管里面元素是0还是1,它的布尔值都是
True;只有空列表[]的布尔值是False。 a or b的执行逻辑:先判断a的布尔值,如果a为True,直接返回a本身;如果a为False,才返回b。
对应你的例子分析
- 执行
l3 = l1 or l2时,l1 = [1,1,0,0]是非空列表,布尔值为True,所以直接返回l1,结果就是[1,1,0,0]。 - 执行
l3 = l2 or l1时,l2 = [0,0,0,1]同样是非空列表,布尔值为True,所以直接返回l2,结果就是[0,0,0,1]。
这就是交换顺序结果不同的原因——or根本没处理列表里的元素,只是在返回第一个“为真”的列表对象。
你用的列表推导式是正确的
你写的列表推导式:
desired = [1 if i[0]==1 or i[1]==1 else 0 for i in list(zip(l1, l2))]
是标准的元素级逻辑或实现方式,它通过zip把两个列表的对应元素配对,再逐一判断逻辑或,完全符合你的需求。
另外也可以简化一点,因为1的布尔值是True,0是False,所以可以写成:
desired = [1 if x or y else 0 for x, y in zip(l1, l2)]
内容的提问来源于stack exchange,提问作者patrick
相关产品推荐
相关产品推荐

