和python中的集合的OR-ing

时间:2013-03-31 00:41:12

标签: python

所以我有

a=set(["a"])
b=set(["b"])

c=a&b会返回一个空集c=set([]) 但是当我输入c = a and b时,为什么它会给我一个set(["b"])

and”和“or”在两套中使用时的作用是什么?

4 个答案:

答案 0 :(得分:6)

一些事情。

  1. 如果您使用的是Python 2.7或更高版本,我建议使用set literal语法。你可以a = {"a"}
  2. 关键字andor是逻辑运算符。它们用于Python的条件逻辑。 |&运算符是按位的;它们被set()类重载。你应该做的是a & b。您可以在此处阅读更多内容:http://docs.python.org/2/library/sets.html#set-objects
  3. 如果您尝试a = 5 and 6,您会看到结果为6。这就是布尔运算符在许多编程语言中的工作方式,包括Python。它基本上是在说“检查左侧的值是否评估为True,如果是,则返回右侧的值。”

答案 1 :(得分:0)

此处有关orand的答案有点缺席。确实,它们是布尔运算符并且与集合无关。它们是短路布尔运算符,通常用作为回退值赋值的捷径。

以下是它的工作方式......

如果您有一条说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替换为ax = a

我认为我从未见过以这种方式使用and,但它确实有效。

答案 2 :(得分:-1)

a and b正在返回b。这是布尔逻辑,而不是集合交集。在Python中,以下是“虚假”对象:NoneFalse0""[]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。