[python] 파이썬 세트에서 ‘+’를 이해하지 못하는 이유는 무엇입니까?

이것이 유효한 이유를 알고 싶습니다.

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

그러나 이것은 유효하지 않습니다.

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

‘+’가 교차점과 합집합을 모두 의미 할 수 있기 때문입니까?



답변

Python 세트에는 +연산자에 대한 구현이 없습니다 .

|집합 결합 및 &교차 집합에 사용할 수 있습니다 .

세트는 -세트 차이로 구현 됩니다. ^대칭 세트 차이 에도 사용할 수 있습니다 (즉, 하나의 세트에는 표시되지만 두 세트에는 표시되지 않는 객체 만있는 새 세트를 반환합니다).


답변

set union은 부울 분리와 밀접한 관련이있는 개념이기 때문에 Python이 |대신 사용하기로 선택했습니다 +. 비트 벡터 (파이썬에서는 int/ long)는 일련의 부울 값에 대해이 연산을 정의하고 “비트 또는”라고 부릅니다. 실제로이 연산은 집합 합집합과 매우 유사하여 이진 정수를 “비트 집합”이라고도합니다. 집합의 요소는 자연수로 간주됩니다.

int세트 류 연산자를 이미 |, &및 로 정의 했기 때문에 ^새로운 set유형이 동일한 인터페이스를 사용하는 것은 당연했습니다 .


답변

집합 이론에서 + 기호는 일반적으로 두 집합 의 분리 된 결합 을 나타냅니다 . A와 B가 세트 인 경우 분리 된 결합이 세트로 정의됩니다.

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

즉, 분리 된 결합을 구성하기 위해 A의 모든 요소와 B의 모든 요소를 ​​다른 태그로 표시하고 (예에서는 숫자 1과 2를 사용했지만 두 개의 다른 “물건”이 작업을 수행합니다) 두 결과 집합의 합집합. 위의 예에서는 일반적인 수학적 표기법과 더 비슷하게 만들기 위해 집합 결합에 ‘U’를 사용했습니다. 아래에서는 파이썬 표기법을 사용합니다. 즉 ‘|’ 결합의 경우 ‘&’는 교차로입니다.

A와 B가 분리 된 경우 A + B는 A | B. 그렇지 않은 경우 A와 B의 모든 공통 요소 x는 A + B에서 두 번 나타납니다. 한 번은 (x, 1)로, 한 번은 (x, 2)로 나타납니다.

따라서 ‘+’기호는 집합 연산으로 매우 잘 정립 된 의미를 가지고 있기 때문에 파이썬이 집합 결합 또는 교차에이 기호를 사용하지 않는다는 것이 매우 일관 적이라는 것을 알았습니다. 아마도 파이썬 디자이너는 집합 연산자를 선택할 때 이것을 염두에 두었을 것입니다.


답변

물론, 그들은 +합집합 을 사용했을 수도 있었지만 교차점에 대한 기호가 여전히 필요했습니다. |for union은 &for 교차로와 대칭 이므로 더 나은 선택을합니다.


답변

때문에 |수단 조합 및 &수단 교차로. 동일한 기능에 대해 여러 연산자를 추가 할 이유가 분명히 없습니다.

사용하는 이유 |&아마는 비트 연산으로 돌아 간다. 집합을 숫자의 비트로 나타내는 경우 합집합 및 교차를 수행하는 데 사용할 연산자입니다.

+단순함은 결합에 묶여 있지 않고 -차이를 설정하는 것입니다.


답변

집합 차이 는 매우 유용하고 일반적으로 알려진 개념 이기 때문에 “집합 추가”라는 개념이 (보편적으로 사용됨) 없습니다.


답변