关于Python集合中or/and操作符返回结果与集合运算差异的原因咨询
为什么Python中
set1 or set2返回set1而非并集,set1 and set2返回set2而非交集? 嘿,这个问题戳中了Python里一个超容易混淆的点!其实这跟集合本身没啥关系,核心是Python逻辑运算符or和and的短路求值规则——它们根本不是用来做集合交并运算的,别把它们和集合专属的运算符搞混啦~
先搞懂or的逻辑:返回第一个“真值”
在Python里,or运算符的作用不是“求并”,而是依次判断操作数的真假,返回第一个为“真”的对象。
- 对于集合来说:空集合
set()是“假值”,非空集合是“真值” - 所以当
set1是非空集合时,set1 or set2会直接返回set1,连set2都不会去评估(这就是“短路”的意思) - 只有当
set1是空集合时,才会返回set2
举个例子验证:
set1 = {1, 2} set2 = {3, 4} print(set1 or set2) # 输出 {1,2},因为set1是真值,直接返回 empty_set = set() print(empty_set or set2) # 输出 {3,4},因为empty_set是假值,才会返回set2
再看and的逻辑:返回最后一个“真值”
and运算符的规则是依次判断操作数的真假,返回第一个为“假”的对象;如果所有操作数都是真,就返回最后一个对象。
- 当
set1是非空集合(真值),set1 and set2会继续评估set2,然后返回set2 - 如果
set1是空集合(假值),会直接返回set1,不会碰set2
例子:
set1 = {1, 2} set2 = {3, 4} print(set1 and set2) # 输出 {3,4},set1是真,所以返回最后一个真值set2 empty_set = set() print(empty_set and set2) # 输出 set(),因为empty_set是假值,直接返回它
集合的交并运算该用啥?
如果要做集合的并集,用|运算符或者set1.union(set2);
如果要做交集,用&运算符或者set1.intersection(set2)。
比如:
set1 = {1, 2} set2 = {2, 3} print(set1 | set2) # 并集,输出 {1,2,3} print(set1 & set2) # 交集,输出 {2}
总结一下:or和and是通用的逻辑判断运算符,看的是操作数的“真假性”,不是集合的元素关系;而|和&才是集合专属的交并运算符号,别搞混咯~
内容的提问来源于stack exchange,提问作者Codi




