You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Python集合中or/and操作符返回结果与集合运算差异的原因咨询

为什么Python中set1 or set2返回set1而非并集,set1 and set2返回set2而非交集?

嘿,这个问题戳中了Python里一个超容易混淆的点!其实这跟集合本身没啥关系,核心是Python逻辑运算符orand的短路求值规则——它们根本不是用来做集合交并运算的,别把它们和集合专属的运算符搞混啦~

先搞懂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}

总结一下:orand是通用的逻辑判断运算符,看的是操作数的“真假性”,不是集合的元素关系;而|&才是集合专属的交并运算符号,别搞混咯~

内容的提问来源于stack exchange,提问作者Codi

火山引擎 最新活动