Python의 집합 유형을 사용한 집합 작업(예: 공용체 집합, 제품 집합 및 하위 집합 결정)

사업

Python은 집합을 처리하는 내장 데이터 유형 집합을 제공합니다.

유형 집합은 중복되지 않는 요소(동일한 값이 아닌 요소, 고유 요소)의 모음이며 합집합 집합, 곱 집합 및 차이 집합과 같은 집합 작업을 수행할 수 있습니다.

이 절에서는 집합형 집합 연산의 기본 연산을 샘플 코드로 설명한다.

  • 세트 객체 생성:{},set()
  • 포함 표기법 설정
  • 집합의 요소 수:len()
  • 세트에 요소 추가하기:add()
  • 집합에서 요소 제거:discard(),remove(),pop(),clear()
  • Wasset (합병, 조합):|연산자,union()
  • 제품 세트(공통 부품, 교차점, 교차점):& 운영자,intersection()
  • 상대 보완:-운영자,difference()
  • 대칭 차이 집합:^ 연산자,symmetric_difference()
  • 하위 집합이든 아니든:<= 연산자,issubset()
  • 상위 세트 여부:>= 연산자,issuperset()
  • 서로 소수인지 아닌지 결정:isdisjoint()

set 유형은 요소를 추가 및 삭제할 수 있는 변경 가능한 유형이며, set 유형과 동일한 집합 연산 및 기타 메서드를 갖지만 불변(추가, 삭제 또는 요소를 수정하여 수정할 수 없음)하는 frozenset 유형도 있습니다. ).

세트 객체 생성::{},set()

물결 괄호 {}에 의해 생성됨

유형 집합의 개체는 요소를 중괄호 {}로 묶어 생성할 수 있습니다.

중복된 값이 있으면 무시되고 고유한 값만 요소로 남습니다.

s = {1, 2, 2, 3, 1, 4}

print(s)
print(type(s))
# {1, 2, 3, 4}
# <class 'set'>

다른 유형을 요소로 가질 수 있습니다. 그러나 목록 유형과 같은 업데이트 가능한 개체는 등록할 수 없습니다. 튜플이 허용됩니다.

또한 집합 유형은 순서가 지정되지 않으므로 생성된 순서가 저장되지 않습니다.

s = {1.23, 'abc', (0, 1, 2), 'abc'}

print(s)
# {(0, 1, 2), 1.23, 'abc'}

# s = {[0, 1, 2]}
# TypeError: unhashable type: 'list'

int 및 float와 같은 다른 유형은 값이 동일한 경우 중복으로 간주됩니다.

s = {100, 100.0}

print(s)
# {100}

빈 중괄호 {}는 사전 유형으로 간주되므로 다음에 설명하는 생성자를 사용하여 빈 집합 유형 객체(빈 집합)를 생성할 수 있습니다.

s = {}

print(s)
print(type(s))
# {}
# <class 'dict'>

생성자 set()에 의해 생성됨

set 유형의 객체는 생성자 set()을 사용하여 생성할 수도 있습니다.

목록이나 튜플과 같은 반복 가능한 개체를 인수로 지정하면 요소가 중복 요소를 제외하고 고유한 값만 있는 집합 개체가 생성됩니다.

l = [1, 2, 2, 3, 1, 4]

print(l)
print(type(l))
# [1, 2, 2, 3, 1, 4]
# <class 'list'>

s_l = set(l)

print(s_l)
print(type(s_l))
# {1, 2, 3, 4}
# <class 'set'>

불변의 frozenset 유형은 생성자 frozenset()으로 생성됩니다.

fs_l = frozenset(l)

print(fs_l)
print(type(fs_l))
# frozenset({1, 2, 3, 4})
# <class 'frozenset'>

인수가 생략되면 빈 집합 유형 개체(빈 집합)가 생성됩니다.

s = set()

print(s)
print(type(s))
# set()
# <class 'set'>

중복 요소는 set()을 사용하여 목록이나 튜플에서 제거할 수 있지만 원래 목록의 순서는 유지되지 않습니다.

집합 유형을 목록이나 튜플로 변환하려면 list(),tuple()을 사용합니다.

l = [2, 2, 3, 1, 3, 4]

l_unique = list(set(l))
print(l_unique)
# [1, 2, 3, 4]

순서를 유지하면서 중복 요소를 제거하고, 중복 요소만 추출하고, 2차원 배열(목록 목록)에서 중복 요소를 처리하는 방법에 대한 정보는 다음 문서를 참조하십시오.

포함 표기법 설정

목록 이해뿐만 아니라 집합 이해도 있습니다. 목록 내포에서 대괄호 []를 중괄호 {}로 바꾸기만 하면 됩니다.

s = {i**2 for i in range(5)}

print(s)
# {0, 1, 4, 9, 16}

목록 이해 표기법에 대한 자세한 내용은 다음 문서를 참조하세요.

집합의 요소 수:len()

세트의 요소 수는 내장 함수 len()을 사용하여 얻을 수 있습니다.

s = {1, 2, 2, 3, 1, 4}

print(s)
print(len(s))
# {1, 2, 3, 4}
# 4

중복된 값 등의 요소가 있는 각 목록의 요소 수를 계산하려면 다음 문서를 참조하세요.

세트에 요소 추가하기:add()

집합에 요소를 추가하려면 add() 메서드를 사용합니다.

s = {0, 1, 2}

s.add(3)
print(s)
# {0, 1, 2, 3}

집합에서 요소 제거:discard(),remove(),pop(),clear()

세트에서 요소를 제거하려면 destroy(), remove(), pop() 및 clear() 메소드를 사용하십시오.

폐기() 메서드는 인수에 지정된 요소를 삭제합니다. 집합에 존재하지 않는 값이 지정되면 아무 작업도 수행되지 않습니다.

s = {0, 1, 2}

s.discard(1)
print(s)
# {0, 2}

s = {0, 1, 2}

s.discard(10)
print(s)
# {0, 1, 2}

remove() 메서드는 인수에 지정된 요소도 제거하지만 집합에 존재하지 않는 값이 지정되면 오류 KeyError가 반환됩니다.

s = {0, 1, 2}

s.remove(1)
print(s)
# {0, 2}

# s = {0, 1, 2}

# s.remove(10)
# KeyError: 10

pop() 메서드는 집합에서 요소를 제거하고 해당 값을 반환합니다. 제거할 값을 선택할 수 없습니다. 빈 집합은 KeyError 오류가 발생합니다.

s = {2, 1, 0}

v = s.pop()

print(s)
print(v)
# {1, 2}
# 0

s = {2, 1, 0}

print(s.pop())
# 0

print(s.pop())
# 1

print(s.pop())
# 2

# print(s.pop())
# KeyError: 'pop from an empty set'

clear() 메서드는 모든 요소를 ​​제거하고 집합을 비워둡니다.

s = {0, 1, 2}

s.clear()
print(s)
# set()

Wasset (합병, 조합):|연산자,union()

합집합 집합(합병, 합집합)은 | 연산자 또는 union() 메서드.

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

s_union = s1 | s2
print(s_union)
# {0, 1, 2, 3}

s_union = s1.union(s2)
print(s_union)
# {0, 1, 2, 3}

메서드에 대해 여러 인수를 지정할 수 있습니다. 집합 유형 외에도 set()에 의해 집합 유형으로 변환될 수 있는 목록 및 튜플도 인수로 지정할 수 있습니다. 후속 연산자 및 메서드에도 동일하게 적용됩니다.

s_union = s1.union(s2, s3)
print(s_union)
# {0, 1, 2, 3, 4}

s_union = s1.union(s2, [5, 6, 5, 7, 5])
print(s_union)
# {0, 1, 2, 3, 5, 6, 7}

제품 세트(공통 부품, 교차점, 교차점):& 운영자,intersection()

제품 세트(공통 부분, 교차점 및 교차점)는 & 연산자 또는 Intersection() 메서드.

s_intersection = s1 & s2
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2)
print(s_intersection)
# {1, 2}

s_intersection = s1.intersection(s2, s3)
print(s_intersection)
# {2}

상대 보완:-운영자,difference()

차이 집합은 – 연산자 또는 difference() 메서드를 사용하여 얻을 수 있습니다.

s_difference = s1 - s2
print(s_difference)
# {0}

s_difference = s1.difference(s2)
print(s_difference)
# {0}

s_difference = s1.difference(s2, s3)
print(s_difference)
# {0}

대칭 차이 집합:^ 연산자,symmetric_difference()

대칭 차이 집합(둘 중 하나만 포함된 요소 집합)은 ^ 연산자 또는 symmetric_difference()를 사용하여 얻을 수 있습니다.

논리 연산에서 배타적 분리(XOR)와 동일합니다.

s_symmetric_difference = s1 ^ s2
print(s_symmetric_difference)
# {0, 3}

s_symmetric_difference = s1.symmetric_difference(s2)
print(s_symmetric_difference)
# {0, 3}

하위 집합이든 아니든:<= 연산자,issubset()

집합이 다른 집합의 하위 집합인지 확인하려면 <= 연산자 또는 issubset() 메서드를 사용합니다.

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True

<= 연산자와 issubset() 메서드는 모두 동등한 집합에 대해 true를 반환합니다.

그것이 진정한 하위 집합인지 확인하려면 <= 연산자를 사용하십시오. 이 연산자는 동등한 집합에 대해 false를 반환합니다.

print(s1 <= s1)
# True

print(s1.issubset(s1))
# True

print(s1 < s1)
# False

상위 세트 여부:>= 연산자,issuperset()

한 집합이 다른 집합의 상위 집합인지 확인하려면 >= 연산자 또는 issuperset()을 사용합니다.

s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True

>= 연산자와 issuperset() 메서드는 모두 동등한 집합에 대해 true를 반환합니다.

그것이 진정한 상위 집합인지 확인하려면 >= 연산자를 사용하십시오. 이 연산자는 동등한 집합에 대해 false를 반환합니다.

print(s1 >= s1)
# True

print(s1.issuperset(s1))
# True

print(s1 > s1)
# False

서로 소수인지 아닌지 결정:isdisjoint()

두 집합이 서로 소수인지 확인하려면 isdisjoint() 메서드를 사용합니다.

s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}

print(s1.isdisjoint(s2))
# False

print(s1.isdisjoint(s3))
# True
Copied title and URL