아래의 조합에서 두 세트의 순서를 변경하면 어떻게 다른 결과를 얻습니까?
set1 = {1, 2, 3}
set2 = {True, False}
print(set1 | set2)
# {False, 1, 2, 3}
print(set2 | set1)
#{False, True, 2, 3}
답변
union ()이 모든 항목을 포함하지 않는 이유
1
과 True
동등 중복으로 간주됩니다. 마찬가지로 0
및 False
또한 동일합니다.
>>> 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의 구체적인 예를 살펴보면 유형별 구분이나 시각적 구분을 기대 한 것 같습니다.
답변
파이썬에서 False
와 0
마찬가지로, 해당 간주 True
하고 1
. 때문에 True
와 1
동일한 값으로 간주되며, 그 중 하나는 집합 동시에 존재할 수있다. 어느 것이 세트에 추가되는 순서에 따라 달라집니다. 첫 번째 줄 set1
에서 첫 번째 세트로 사용되므로 1
결과 세트가됩니다. 두 번째 세트에서는 True
첫 번째 세트에 있으므로 True
결과에 포함됩니다.
답변
https://docs.python.org/3/library/stdtypes.html#boolean-values 섹션 4.12.10 을 보면 . 부울 값 :
부울 값은 두 개의 상수 객체 False 및 True 입니다. 진리 값을 나타내는 데 사용됩니다 (다른 값도 거짓 또는 참으로 간주 될 수 있음). 숫자 컨텍스트 (예 : 산술 연산자에 대한 인수로 사용되는 경우) 에서는 각각 정수 0 및 1 처럼 동작합니다 .
답변
비교 연산자 ( ==
, !=
) 부울 정의 True
와 False
1과 0을하였습니다.
그렇기 때문에 집합 조합에서 True
이미 새 집합에 있는지 여부를 확인할 때 진실한 대답을 얻습니다.
>>> True in {1}
True
>>> 1 in {True}
True