Почему ' + ' не понимается наборами Python?


Я хотел бы знать, почему это действует:

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

но это неверно:

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

это потому, что '+' может означать как пересечение и объединение?

6 68

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.

конечно, они могли бы использовать + сделать союз, но тогда все равно нужен символ пересечения. | для объединения симметрично с & на пересечении и, таким образом, делает лучший выбор.

, потому что | означает союз и & означает пересечение. Очевидно, что нет причин добавлять несколько операторов для одной и той же функции.

причины использования | и & вероятно, возвращается к побитовым операциям. Если вы представляете набор как биты в числе, это операторы, которые вы использовали бы для объединения и пересечения.

+ простой не так привязан к союзу и - установить разницу.

, потому что установить разницу это очень полезная и широко известная концепция, но нет (универсально используемой) концепции "сложения множеств".