[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 교차로와 대칭 이므로 더 나은 선택을합니다.
답변
때문에 |
수단 조합 및 &
수단 교차로. 동일한 기능에 대해 여러 연산자를 추가 할 이유가 분명히 없습니다.
사용하는 이유 |
와 &
아마는 비트 연산으로 돌아 간다. 집합을 숫자의 비트로 나타내는 경우 합집합 및 교차를 수행하는 데 사용할 연산자입니다.
+
단순함은 결합에 묶여 있지 않고 -
차이를 설정하는 것입니다.