Pourquoi ‘+’ n’est-il pas compris par les ensembles Python?

Je voudrais savoir pourquoi c’est valide:

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

mais ce n’est pas valide:

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

Est-ce parce que «+» peut signifier à la fois l’intersection et l’union?

Les ensembles Python n’ont pas d’implémentation pour l’opérateur + .

Vous pouvez utiliser | pour définir l’union et & pour définir l’intersection.

Les ensembles implémentent - tant que différence définie. Vous pouvez également utiliser ^ pour la différence de jeux symésortingques (c.-à-d., Il renverra un nouvel ensemble avec seulement les objects qui apparaissent dans un jeu mais n’apparaissent pas dans les deux jeux).

Python a choisi d’utiliser | au lieu de + car set union est un concept étroitement lié à la disjonction booléenne; Les vecteurs de bits (qui en python sont juste int / long ) définissent cette opération sur une séquence de valeurs booléennes et l’appellent “bitwise”. En fait, cette opération est tellement similaire à l’union définie que les entiers binarys sont parfois aussi appelés “ensembles de bits”, où les éléments de l’ensemble sont considérés comme des nombres naturels.

Parce que int définit déjà les opérateurs de type set comme | , & et ^ , il était naturel que le nouveau type de set utilise la même interface.

En théorie des ensembles, le symbole + indique normalement l’ union disjointe de deux ensembles. Si A et B sont des ensembles, leur union disjointe est définie comme étant l’ensemble

 A + B = {(a, 1) | a in A} U {(b, 2) | b in B} 

Par exemple, pour construire l’union disjointe, nous marquons tous les éléments de A et tous les éléments de B avec des balises différentes (dans l’exemple, j’ai utilisé les chiffres 1 et 2, mais deux choses différentes feraient l’affaire). union des deux ensembles résultants. Dans l’exemple ci-dessus, j’ai utilisé «U» pour l’union de l’ensemble pour le rendre plus similaire à la notation mathématique habituelle; ci-dessous j’utilise la notation Python, c’est à dire ‘|’ pour l’union et ‘&’ pour l’intersection.

Si A et B sont disjoints, le A + B a une correspondance de 1 à 1 avec A | B. S’ils ne le sont pas, alors tous les éléments communs x dans A et B apparaissent deux fois dans A + B: une fois (x, 1) et une fois (x, 2).

Donc, puisque le symbole ‘+’ a une signification bien établie en tant qu’opération d’ensemble, je trouve très cohérent que Python n’utilise pas ce symbole pour définir l’union ou l’intersection. Les concepteurs de Python avaient probablement ceci en tête quand ils ont choisi des opérateurs de set.

Bien sûr, ils auraient pu utiliser + pour faire une union, mais auraient toujours besoin d’un symbole pour l’intersection. | pour l’union est symésortingque avec & pour l’intersection et fait ainsi un meilleur choix.

Parce que | signifie union et & signifie intersection. Il n’y a clairement aucune raison d’append plusieurs opérateurs pour la même fonction.

Les raisons d’utiliser | et & probablement retourne aux opérations binarys. Si vous représentez un ensemble comme les bits d’un nombre, ce sont les opérateurs que vous utiliseriez pour faire l’union et l’intersection.

+ simple n’est pas aussi lié à l’union et - est de définir la différence.

Parce que la différence de set est un concept très utile et communément connu, mais il n’ya pas de concept (universellement utilisé) de «set add».