2 세트의 조합은 모든 항목을 포함하지 않습니다.


94

아래의 조합에서 두 세트의 순서를 변경하면 어떻게 다른 결과를 얻습니까?

set1 = {1, 2, 3}
set2 = {True, False}

print(set1 | set2)
# {False, 1, 2, 3}

print(set2 | set1)
#{False, True, 2, 3}

답변:


110

union ()이 모든 항목을 포함하지 않는 이유

1True동등 중복으로 간주됩니다. 마찬가지로 0False또한 동일합니다.

>>> 1 == True
True
>>> 0 == False
True

사용되는 동등한 값

여러 동등한 값이 발견되면 세트는 첫 번째 값을 유지합니다.

>>> {0, False}
{0}
>>> {False, 0}
{False}

가치를 구별하는 방법

별개로 취급되도록하려면 한 (value, type)쌍으로 저장하십시오 .

>>> set1 = {(1, int), (2, int), (3, int)}
>>> set2 = {(True, bool), (False, bool)}
>>> set1 | set2
{(3, <class 'int'>), (1, <class 'int'>), (2, <class 'int'>),
 (True, <class 'bool'>), (False, <class 'bool'>)}
>>> set1 & set2
set()

값을 구별하는 또 다른 방법은 문자열로 저장하는 것입니다.

>>> set1 = {'1', '2', '3'}
>>> set2 = {'True', 'False'}
>>> set1 | set2
{'2', '3', 'False', 'True', '1'}
>>> set1 & set2
set()

이것이 수수께끼를 풀고 앞으로 나아갈 길을 보여주기를 바랍니다. :-)


댓글에서 구출 :

이것은 교차 유형 등가를 깨는 표준 기술입니다 (예 0.0 == 0: True == 1, 및 Decimal(8.5) == 8.5).이 기술은 Python 2.7의 정규식 모듈에서 사용되어 유니 코드 정규식이 다른 동등한 str 정규식과 구별되게 캐시되도록 강제합니다.이 기술은 Python에서도 사용됩니다. 입력 된 매개 변수가 true 인 경우 functools.lru_cache ()의 경우 3입니다.

OP에 기본 동등성 관계 이외의 것이 필요한 경우 몇 가지 새로운 관계를 정의해야합니다. 사용 사례에 따라 문자열에 대한 대소 문자 구분 안 함, 유니 코드에 대한 정규화, 시각적 모양 (다른 것으로 보이는 것은 다른 것으로 간주 됨), ID (두 개의 개별 개체가 동일한 것으로 간주되지 않음), 값 / 유형 쌍 또는 기타가 될 수 있습니다. 등가 관계를 정의하는 함수. OP의 구체적인 예를 살펴보면 유형별 구분이나 시각적 구분을 기대 한 것 같습니다.


20

파이썬에서 False0마찬가지로, 해당 간주 True하고 1. 때문에 True1동일한 값으로 간주되며, 그 중 하나는 집합 동시에 존재할 수있다. 어느 것이 세트에 추가되는 순서에 따라 달라집니다. 첫 번째 줄 set1에서 첫 번째 세트로 사용되므로 1결과 세트가됩니다. 두 번째 세트에서는 True첫 번째 세트에 있으므로 True결과에 포함됩니다.


6

https://docs.python.org/3/library/stdtypes.html#boolean-values 섹션 4.12.10 을 보면 . 부울 값 :

부울 값은 두 개의 상수 객체 False 및 True 입니다. 진리 값을 나타내는 데 사용됩니다 (다른 값도 거짓 또는 참으로 간주 될 수 있음). 숫자 컨텍스트 (예 : 산술 연산자에 대한 인수로 사용되는 경우) 에서는 각각 정수 0 및 1 처럼 동작합니다 .


4

비교 연산자 ( ==, !=) 부울 정의 TrueFalse1과 0을하였습니다.

그렇기 때문에 집합 조합에서 True이미 새 집합에 있는지 여부를 확인할 때 진실한 대답을 얻습니다.

>>> True in {1}
True
>>> 1 in {True}
True
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.