Me gustaría saber por qué esto es válido:
set(range(10)) - set(range(5))
pero esto no es válido:
set(range(10)) + set(range(5))
¿Es porque '+' podría significar tanto intersección como unión?
Me gustaría saber por qué esto es válido:
set(range(10)) - set(range(5))
pero esto no es válido:
set(range(10)) + set(range(5))
¿Es porque '+' podría significar tanto intersección como unión?
~fuera un operador binario, entonces podría tener |para + unión y ~para diferencia, que es mucho más equilibrado.
Respuestas:
Los conjuntos de Python no tienen una implementación para el +operador.
Puede utilizar |para unión de conjuntos y ¶ intersección de conjuntos.
Los conjuntos se implementan -como diferencia de conjuntos. También puede usar ^para diferencia de conjuntos simétricos (es decir, devolverá un nuevo conjunto con solo los objetos que aparecen en un conjunto pero no aparecen en ambos conjuntos).
Python eligió usar en |lugar de +porque la unión de conjuntos es un concepto que está estrechamente relacionado con la disyunción booleana; Los vectores de bits (que en python son simplemente int/ long) definen esta operación en una secuencia de valores booleanos y la llaman "bit a bit o". De hecho, esta operación es tan similar a la unión de conjuntos que los enteros binarios a veces también se denominan "conjuntos de bits", donde los elementos del conjunto se toman como números naturales.
Debido a que intya define operadores de tipo conjunto como |, &y ^, era natural que el settipo más nuevo usara la misma interfaz.
En la teoría de conjuntos, el símbolo + normalmente indica la unión disjunta de dos conjuntos. Si A y B son conjuntos, su unión disjunta se define como el conjunto
A + B = {(a, 1) | a in A} U {(b, 2) | b in B}
es decir, para construir la unión disjunta, marcamos todos los elementos de A y todos los elementos de B con etiquetas diferentes (en el ejemplo usé los números 1 y 2, pero dos "cosas" diferentes harían el trabajo) y luego tomamos el unión de los dos conjuntos resultantes. En el ejemplo anterior, he utilizado 'U' para la unión de conjuntos para que sea más similar a la notación matemática habitual; a continuación utilizo la notación de Python, es decir, '|' para unión y '&' para intersección.
Si A y B son disjuntos, A + B tiene una correspondencia de 1 a 1 con A | B. Si no es así, entonces todos los elementos comunes x en A y B aparecen dos veces en A + B: una vez como (x, 1) y una vez como (x, 2).
Entonces, dado que el símbolo '+' tiene un significado bastante bien establecido como una operación de conjunto, me parece muy consistente que Python no use este símbolo para la unión o intersección de conjuntos. Probablemente los diseñadores de Python tenían esto en mente cuando eligieron operadores de conjuntos.
|operador para uniones de conjuntos, pero no entendí por qué Guido también evitaba sobrecargar al +operador para uniones de conjuntos. Después de todo, hacerlo habría preservado la ortogonalidad con el +operador sobrecargado para adiciones a la lista. Dado que el sello distintivo de Python es la conformidad con la notación matemática (por ejemplo, que jdenota el componente complejo de números complejos), la curiosa elección de Guido finalmente tiene sentido.
Claro, podrían haber +hecho una unión, pero luego todavía necesitarían un símbolo para la intersección. |para unión es simétrica con ¶ intersección y por lo tanto hace una mejor elección.
Porque |significa unión y &significa intersección. Claramente, no hay razón para agregar varios operadores para la misma función.
Las razones para usar |y &probablemente se remontan a operaciones bit a bit. Si representa un conjunto como los bits en un número, esos son los operadores que usaría para hacer uniones e intersecciones.
+simple no está tan ligado a la unión y -es marcar la diferencia.
Porque la diferencia de conjuntos es un concepto muy útil y comúnmente conocido, pero no existe un concepto (de uso universal) de "suma de conjuntos".
+se define como una adición de miembros . Algunos lo usan para diferencia simétrica . De cualquier manera, cualquier papel que lo use lo llama de otra manera o lo define primero.
|significa unión. ¿Que estas preguntando?