programing

두 집합의 결합이 모든 항목을 포함하지는 않습니다.

linuxpc 2023. 5. 1. 20:00
반응형

두 집합의 결합이 모든 항목을 포함하지는 않습니다.

아래 조합에서 두 세트의 순서를 변경하면 왜 결과가 다릅니까?

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

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

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

유니언()에 모든 항목이 포함되지 않는 이유

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의 정규식 모듈에서 사용되어 유니코드 정규식이 다른 동일한 문자열 정규식과 구별하여 캐시되도록 합니다.이 기법은 Python 3에서도 type 매개 변수가 true일 때 functools.lru_cache()에 사용됩니다.

OP에 기본 동등성 관계가 아닌 다른 관계가 필요한 경우 몇 가지 새로운 관계를 정의해야 합니다.사용 사례에 따라 문자열에 대한 대소문자 구분, 유니코드에 대한 정규화, 시각적 모양(다른 것으로 간주됨), 동일성(두 개의 구별되는 개체가 동일하게 간주되지 않음), 값/유형 쌍 또는 동등성 관계를 정의하는 기타 함수일 수 있습니다.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처럼 동작합니다.

연산자==,!=는 boolean )에 됩니다.True그리고.False1과 0을 일치시킵니다.

그렇기 때문에 세트 유니온에서, 그것이 그것이 확인할 때.True이미 새 세트에 포함되어 있으므로 다음과 같은 정확한 답변을 얻을 수 있습니다.

>>> True in {1}
True
>>> 1 in {True}
True

언급URL : https://stackoverflow.com/questions/44489658/union-of-2-sets-does-not-contain-all-items

반응형