所以我有
a=set(["a"])
b=set(["b"])
c=a&b
会返回一个空集c=set([])
但是当我输入c = a and b
时,为什么它会给我一个set(["b"])
“and
”和“or
”在两套中使用时的作用是什么?
答案 0 :(得分:6)
一些事情。
a = {"a"}
。and
和or
是逻辑运算符。它们用于Python的条件逻辑。 |
和&
运算符是按位的;它们被set()
类重载。你应该做的是a & b
。您可以在此处阅读更多内容:http://docs.python.org/2/library/sets.html#set-objects 如果您尝试a = 5 and 6
,您会看到结果为6
。这就是布尔运算符在许多编程语言中的工作方式,包括Python。它基本上是在说“检查左侧的值是否评估为True
,如果是,则返回右侧的值。”
答案 1 :(得分:0)
此处有关or
和and
的答案有点缺席。确实,它们是布尔运算符并且与集合无关。它们是短路布尔运算符,通常用作为回退值赋值的捷径。
以下是它的工作方式......
如果您有一条说a or b
的陈述,并且您必须评估整个陈述是否属实,那么您首先要弄清楚a
是否属实。如果您发现a
为真,那么您无需费心评估b
,因为对任何事情都是真的或者总是如此。另一方面,如果a
为false,则必须评估b
以确定整个语句是否为false。此外,无论b
是什么,都将是整个a or b
语句的结果。
因此,x = a or b
将首先测试a
是否为真,如果是语句的整个右侧将成为a
。同样,如果a
为false,则整个右侧变为b
,因为b
将确定a or b
是否为真,因为我们知道a
为假。
and
也是短路运营商。使用a and b
时,如果a
为false,我们可以停止评估并说明整个语句为false并忽略b
。如果a
为真,则整个语句依赖于b
的布尔值。
因此,x = a and b
将首先测试a
是否为真。如果a
为真,那么a and b
的结果可以简化为b
,然后语句变为x = b
。如果a
为false,那么我们可以停在a
,只需将a and b
替换为a
并x = a
。
我认为我从未见过以这种方式使用and
,但它确实有效。
答案 2 :(得分:-1)
a and b
正在返回b
。这是布尔逻辑,而不是集合交集。在Python中,以下是“虚假”对象:None
,False
,0
,""
,[]
,tuple()
,{{1因为set([])
和a
都是“真实”对象,b
会返回b
。
http://docs.python.org/2/tutorial/datastructures.html#more-on-conditions
这样做的一个用途就是初始化一个这样的变量:
a and b
答案 3 :(得分:-2)
c=a&b
返回两组的交集,在这种情况下什么都不是。 c=a and b
使用标准的Python逻辑运算符。所以当你说c=a and b
时你基本上说c =(a是真)和(b是真)。天真地,因为在这种情况下a和b都不是空的并且评估为True,你会期望c为True。但是,当您使用逻辑运算符设置值时,Python不仅返回True,而且返回最后一个True对象的值,在本例中为b。