[python] 집합(set)

🚀 집합(Set)의 정의

  • {} 괄호 안에 키를 콤마(,)로 구분하여 나열
  • 사전을 정의하는 괄호와 같지만, 값은 없고 키만 있음
  • 값을 포함하고 있는지 여부만 중요할 뿐이어서 키의 중복을 허락하지 않고, 순서도 별 의미 없음
  • 집합(set) 생성시 요소가 2개여도 결과적으로는 하나만 저장됨
asia = {'korea', 'china', 'japan', 'korea'}
print(asia)

>>> {'korea', 'japan', 'china'}

🚀 집합(set) 변환

print('string     - ', set('sanghyung'))
print('list       - ', set([12, 34, 56, 78]))
print('tuple      - ', set(("Emily", "Jack", "Smith")))
print('dictionary - ', set({'boy':'소년', 'school':'학교','book':'책'}))
print('empty set  - ', set())
string     -  {'h', 'u', 'n', 'y', 's', 'a', 'g'}
list       -  {56, 34, 12, 78}
tuple      -  {'Emily', 'Jack', 'Smith'}
dictionary -  {'school', 'book', 'boy'}
empty set  -  set()
  • 집합의 경우, 다른 자료형과는 다르게 공집합 생성시 set() 만 가능
  • 집합은 사전을 만들 때 쓰는 괄호와 같아서 {}의 경우, 빈 사전을 의미

🚀 요소 추가 및 삭제

집합은 수정 가능한 자료형이기 때문에 언제든지 키를 넣고 뺄 수 있음

  • 집합에 원소를 추가할 때는 add 메서드를 사용
  • 집합에서 원소를 제거할 때는 remove 메서드를 사용
  • update 메서드는 집합끼리 결합하여 합집합 생성
asia = {'korea', 'china', 'japan'}
asia.add('vietnam')    # 추가
asia.add('china')      # 추가 안됨
asia.remove('japan')   # 제거
print(asia)

asia.update({'singapore', 'hongkong', 'korea'})
print(asia)
{'vietnam', 'korea', 'china'}
{'vietnam', 'china', 'singapore', 'hongkong', 'korea'}

🚀 집합의 연산

 연산   기호   메서드  설명
합집합 | union 두 집합의 모든 원소
교집합 \& intersection 두 집합 모두에 있는 원소
차집합 - difference 왼쪽 집합의 원소 중 오른쪽 집합의 원소를 뺀 것
배타적 차집합 \^ symmetric_difference 한쪽 집합에만 있는 원소의 합
twox = {2, 4, 6, 8, 10, 12}
threex = {3, 6, 9, 12, 15}

print("교집합", twox & threex)
print("합집합", twox | threex)
print("차집합", twox - threex)
print("차집합", threex - twox)
print("배타적 차집합", twox ^ threex)
교집합 {12, 6}
합집합 {2, 3, 4, 6, 8, 9, 10, 12, 15}
차집합 {8, 2, 10, 4}
차집합 {9, 3, 15}
배타적 차집합 {2, 3, 4, 8, 9, 10, 15}

💡 부분 집합 여부 조사

 연산   기호   메서드  설명
부분집합 <= issubset 왼쪽이 오른쪽의 부분집합인지 조사
진성 부분집합 <   부분집합이면서 여분의 원소가 더 있음
포함집합 >= issuperset 왼쪽이 오른쪽 집합을 포함하는지 조사
진성 포함집합 >   포함집합이면서 여분의 원소가 더 있음

특정 원소가 집합에 포함되어 있는지는 in 연산자로 조사 (포함 여부만 조사할 떄는 in, not in 구문이 가장 간편!)

mammal = {'코끼리', '고릴라', '사자', '고래', '사람', '원숭이', '개'}
primate = {'사람', '원숭이', '고릴라'}

if '사자' in mammal:
    print('사자는 포유류이다.')
else:
    print('사자는 포유류가 아니다.')
    
print(primate <= mammal)
print(primate <  mammal)
print(primate >= mammal)
print(primate >  mammal)
사자는 포유류이다.
True
True
False
False

Categories:

Updated:

Leave a comment