为什么“+”不能被Python集合理解?
我想知道为什么这是有效的:
set(range(10)) - set(range(5))
但是这不是有效的:
set(range(10)) + set(range(5))
是因为“+”可能意味着交叉和联合?
Python集合没有+
运算符的实现。
你可以使用|
设置联合和&
设置交叉点。
集合执行-
作为集合的差异。 您也可以使用^
作为对称集合的差异(即,它将返回一个新的集合,只出现在一个集合中但不出现在这两个集合中的对象)。
Pythonselect使用|
而不是+
因为set union是一个与布尔析取密切相关的概念; 位向量(在Python中只是int
/ long
)通过一系列布尔值来定义这个操作,并将其称为“按位或”。 实际上,这个操作与设置的联合非常相似,以至于二进制整数有时也被称为“位集”,其中集合中的元素被视为自然数。
因为int
已经定义了set-like运算符为|
, &
和^
,新的set
types使用相同的接口是很自然的。
当然,他们可以用+
来做一个联合,但是那时还需要一个交集的符号。 |
因为工会是与对称的交叉口,从而作出更好的select。
在集合论中+符号通常表示两个集合的不相交联合 。 如果A和B是集合,它们的不相交联合被定义为集合
A + B = {(a, 1) | a in A} U {(b, 2) | b in B}
即构造不相交的联合,我们用不同的标记标记A的所有元素和B的所有元素(在这个例子中我使用了数字1和2,但是任何两个不同的“东西”都可以完成这个工作)两个结果集的结合。 在上面的例子中,我使用'U'来设置联合,使它更像通常的math符号; 下面我使用Python符号,即“|” 工会,'&'为交集。
如果A和B不相交,则A + B与A |具有1对1的对应关系 B.如果不是,那么A和B中的所有公共元素x在A + B中出现两次:一次为(x,1),一次为(x,2)。
所以,由于'+'符号作为一个集合操作具有相当完善的意义,所以我发现Python不会使用这个符号来设置联合或交集。 Pythondevise者在select集合运算符时可能会考虑到这一点。
因为|
意味着工会和手段的交集。 显然没有理由为相同的function添加多个运算符。
使用|
的原因 和&
可能会回到按位操作。 如果您将一个集合表示为一个数字中的位,那么这些操作符就是您用来组合和相交的操作符。
+
简单不是绑定到工会,而是设置差异。
由于集合差异是一个非常有用而且众所周知的概念,但是“集合加法”没有(普遍使用的)概念。