Почему ' + ' не понимается наборами Python?
Я хотел бы знать, почему это действует:
set(range(10)) - set(range(5))
но это неверно:
set(range(10)) + set(range(5))
это потому, что '+' может означать как пересечение и объединение?
6 ответов:
наборы Python не имеют реализации для
+
оператора.можно использовать
|
для объединения множеств и&
на пересечение множеств.комплекты реализуют
-
как установить разницу. Вы также можете использовать^
для симметрическая разность множеств (т. е. он возвращает новый набор, только объекты, которые появляются в одном наборе, но не появляются в обоих наборах).
Python решил использовать
|
вместо+
потому что объединение множеств-это понятие, которое тесно связано с булевой дизъюнкцией; битовые векторы (которые в python простоint
/long
) определите эту операцию через последовательность булевых значений и назовите ее "побитовой или". На самом деле эта операция очень похожа на объединение множеств, что двоичные числа иногда также называется "бит", где элементы в наборе считаются натуральные числа., потому что
int
уже определяет набор операторов, как|
,&
и^
, это было естественно для новойset
тип для использования того же интерфейса.
в теории множеств символ " + " обычно означает несвязным Союзом из двух наборов. Если A и B-множества, то их непересекающееся объединение определяется как множество
A + B = {(a, 1) | a in A} U {(b, 2) | b in B}
Если A и B непересекаются, то a + B имеет соответствие 1-к-1 С A | B. Если это не так, то все общие элементы x в A & B появляются дважды в A + B: один раз как (x, 1) и один раз как (x, 2).
Итак, поскольку символ ' + ' имеет вполне устоявшееся значение как операция набора, я нахожу его очень последовательным, что Python не использует этот символ для объединения множества или пересечения. Вероятно, дизайнер(ы) Python имел это в виду, когда они выбирали операторы set.
конечно, они могли бы использовать
+
сделать союз, но тогда все равно нужен символ пересечения.|
для объединения симметрично с&
на пересечении и, таким образом, делает лучший выбор.
, потому что
|
означает союз и&
означает пересечение. Очевидно, что нет причин добавлять несколько операторов для одной и той же функции.причины использования
|
и&
вероятно, возвращается к побитовым операциям. Если вы представляете набор как биты в числе, это операторы, которые вы использовали бы для объединения и пересечения.
+
простой не так привязан к союзу и-
установить разницу.
, потому что установить разницу это очень полезная и широко известная концепция, но нет (универсально используемой) концепции "сложения множеств".