1. 세트

  • 세트(set)는 중복되지 않는 항목들의 컬렉션입니다.
  • 순서가 없다
  • 세트는 중괄호 {}를 사용 or set() 생성자를 사용
  • 중복을 제거할 때 효과적이다.
# 중복이 없고, 순서가 없다.
# 값이 있는지 없는지 검사
world_set = {'korea', 'america', 'japan', 'china'} # 중괄호에 값이 하나씩 연결되어 있으면 set

print(type(world_set)) # <class 'set'>
print(len(world_set)) # 4

#print(world_set[1]) # 오류 -> 순서가 없기때문에 데이터를 가져올 수 없다.

world_set.add('korea') # 중복된 값은 데이터에 추가되지 않는다.
print(world_set)    #{'china', 'korea', 'japan', 'america'}

# set의 데이터를 가져오는 방법
# 다른 구조로 형변환을 시킴
# print로 출력했을때 나오는 데이터 값은 set을 다른 자료구조로 가져온 다음 {}로 닫아준 것.

 

대부분 set은 중복제거 할 때 사용한다.

data = [1, 2, 3, 1, 1, 4, 4, 5]
print(list(set(data))) #[1, 2, 3, 4, 5]

 


 

1. 생성

세트는 중괄호 {} 사용하여 생성하거나 set() 생성자를 사용할  있습니다.

s1 = {} #빈 괄호를 넣으면 딕셔너리로 인식 따라서 값을 넣어야함 => 딕셔너리는 {키 : 값} 값을 쌍으로 저장
print(s1)
print(type(s1))
더보기

{}

<class 'dict'>

s1 = {1, 3, 5, 7} # 딕셔너리와 달리 값을 하나만 넣으면 세트
print(s1)
print(type(s1))
더보기

{1, 3, 5, 7}

<class 'set'>

li1 = [1, 3, 5, 7]
s2 = set(li1)
print(s2)
type(s2)
더보기
{1, 3, 5, 7}
set
s3 = {1, 3, 5, 3, 7, 9, 1}
print(s3) # 세트는 중복된 데이터가 제거된 채로 출력
더보기

{1, 3, 5, 7, 9}

 

 

2. 메소드

세트는 여러 메소드를 가지고 있습니다.

 

 

# add(): 세트에 항목을 추가하는 메서드

# add(): 세트에 항목을 추가하는 메서드
s1 = {100, 200}
s1.add(150) # set에 데이터 추가
print(s1)

s1.add(50) # set는 패턴생각 x 순서가 마음대로 지정됨
print(s1) # set는 순서가 없는 집합
더보기

{200, 100, 150}

{200, 50, 100, 150}

 

# update(): 세트에 여러 항목을 한번에 추가하는 메서드

# update(): 세트에 여러 항목을 한번에 추가하는 메서드
s1 = {100, 200}
s1.update([40,50,60,20])
print(s1) # 순서에 관계없이 데이터가 들어감
더보기

{100, 200, 40, 50, 20, 60}

 

# remove():  세트의 항목을 제거. 만약 그 항목이 세트에 없으면, KeyError가 발생

# remove():  세트의 항목을 제거. 만약 그 항목이 세트에 없으면, KeyError가 발생
s1 = {10, 20, 30}
s1.remove(20)
print(s1)
#s1.remove(20) #없는 데이터를 지우면 KeyEroor: 20
더보기

{10, 30}

 

# discard(): 세트의 항목을 제거. 제거할 항목이 없어도 에러가 발생하지 않음

# discard(): 세트의 항목을 제거. 제거할 항목이 없어도 에러가 발생하지 않음
s1 = {10, 20, 30}
print(s1)
s1.discard(30)
print(s1)
더보기

{10, 20, 30}

{10, 20}

 

# copy(): 세트를 복사
# s1과 s2의 메모리 주소는 다름

# copy(): 세트를 복사
# s1과 s2의 메모리 주소는 다름
s1 = {10, 20, 30}
s2 = s1.copy() # s2 = s1(X)
print(s1)
print(s2)
print(id(s1))
print(id(s2))
더보기

{10, 20, 30}

{10, 20, 30}

135381086399712

135381086400832

 

# union(): 두 세트의 합집합을 반환

# s1|s2 

# union(): 두 세트의 합집합을 반환
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}

#result1 = s1.union(s2) # s1 | s2
result1 = s1 | s2
print(result1)
더보기

{70, 40, 10, 50, 20, 60, 30}

 

# intersection(): 두 세트의 교집합을 반환

# s1 & s2

# intersection(): 두 세트의 교집합을 반환
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
#result2 = s1.intersection(s2)
result2 = s1 & s2
print(result2)
더보기

{40, 50, 30}

 

# difference(): 두 세트의 차집합을 반환

# s1 - s2

# difference(): 두 세트의 차집합을 반환
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
#result3 = s1.difference(s2)
result3 = s1 - s2
print(result3)
더보기

{10, 20}

 

# 대칭차집합 (합집합 - 교집합)

# s1 ^ s2

# 대칭차집합 (합집합 - 교집합)
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
#result4 = s1.symmetric_difference(s2)
result4 = s1 ^ s2
print(result4)
더보기

{20, 70, 10, 60}