为什么“+”不能被Python集合理解?

我想知道为什么这是有效的:

set(range(10)) - set(range(5)) 

但是这不是有效的:

 set(range(10)) + set(range(5)) 

是因为“+”可能意味着交叉和联合?

Python集合没有+运算符的实现。

你可以使用| 设置联合和&设置交叉点。

集合执行-作为集合的差异。 您也可以使用^作为对称集合的差异(即,它将返回一个新的集合,只出现在一个集合中但不出现在这两个集合中的对象)。

Pythonselect使用| 而不是+因为set union是一个与布尔析取密切相关的概念; 位向量(在Python中只是int / long )通过一系列布尔值来定义这个操作,并将其称为“按位或”。 实际上,这个操作与设置的联合非常相似,以至于二进制整数有时也被称为“位集”,其中集合中的元素被视为自然数。

因为int已经定义了set-like运算符为|&^ ,新的settypes使用相同的接口是很自然的。

当然,他们可以用+来做一个联合,但是那时还需要一个交集的符号。 | 因为工会是与对称的交叉口,从而作出更好的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添加多个运算符。

使用|的原因 和&可能会回到按位操作。 如果您将一个集合表示为一个数字中的位,那么这些操作符就是您用来组合和相交的操作符。

+简单不是绑定到工会,而是设置差异。

由于集合差异是一个非常有用而且众所周知的概念,但是“集合加法”没有(普遍使用的)概念。