파이썬 컬렉션 타입 - 세트

현서·2025년 1월 1일

파이썬

목록 보기
7/27
post-thumbnail

1. 세트(Set)

중복되지 않는 항목들의 순서가 없는 컬렉션

s1 = {1, 3, 5, 7}
print(s1)
print(type(s1))
{1, 3, 5, 7}
<class 'set'>
s2 = {}
print(s2)
print(type(s2))
{}
<class 'dict'>

→ {} 안에 아무것도 없을 때는 type이 dict

s3 = set([1, 3, 5, 7])
print(s3)
print(type(s3))

li4 = [1,2,3,4]
print(type(li4))
s4 = set(li4)
print(s4)
print(type(s4))
{1, 3, 5, 7}
<class 'set'>
<class 'list'>
{1, 2, 3, 4}
<class 'set'>
s5 = {1, 3, 5, 3, 7, 9, 1, 5, 10, 7}
print(s5)

li2 = [1, 3, 5, 3, 7, 9, 1, 5, 10, 7]
print(li2)
s6 = set(li2)
print(s6)
{1, 3, 5, 7, 9, 10}
[1, 3, 5, 3, 7, 9, 1, 5, 10, 7]
{1, 3, 5, 7, 9, 10}

→ set은 중복되지 않는 컬렉션이기 때문에 set 안 숫자들은 중복된 것이 없이 출력된 것을 확인할 수 있다.

2. 세트의 메서드

s1 = {1, 3, 5, 7}
print(s1)

# add(): 세트의 요소를 추가
s1.add(2)
print(s1)
s1.add(4)
print(s1)
s1.add(7)
print(s1)

# s1.add(10, 20, 30) / Error
# s1.add([10, 20, 30])  / Error
{1, 3, 5, 7}
{1, 2, 3, 5, 7}
{1, 2, 3, 4, 5, 7}
{1, 2, 3, 4, 5, 7}
s1 = {1, 3, 5, 7}
print(s1)

# update(): 세트에 여러 요소를 추가
s1.update([2, 4, 6, 8, 10])
print(s1)
{1, 3, 5, 7}
{1, 2, 3, 4, 5, 6, 7, 8, 10}
s1 = {1, 3, 5, 7}
print(s1)

# remove(): 세트의 요소를 제거. 단 요소가 없으면 에러가 발생
s1.remove(3)
print(s1)
# s1.remove(3) # KeyError: 3
{1, 3, 5, 7}
{1, 5, 7}
s1 = {1, 3, 5, 7}
print(s1)

# discard(): 세트의 요소를 제거. 단 요소가 없어도 에러가 발생하지 않음
s1.discard(3)
print(s1)
s1.discard(3)
print(s1)
{1, 3, 5, 7}
{1, 5, 7}
{1, 5, 7}
s1 = {1, 3, 5, 7}
print(s1)

s2 = s1 # 메모리 주소를 복사
print(id(s1))
print(id(s2))

# copy(): 세트를 복사
s2 = s1.copy() # 값을 복사
print(s1)
print(s2)
print(id(s1)) # 값을 복사한 것이기 때문에 다른 메모리를 가리키고 있음.
print(id(s2))
{1, 3, 5, 7}
140705178204896
140705178204896
{1, 3, 5, 7}
{1, 3, 5, 7}
140705178204896
140705178204000
s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

# union(): 합집합을 계산하여 반환
result1 = s3.union(s4)
print(result1)

result2 = s3 | s4
print(result2)
{70, 40, 10, 50, 20, 60, 30}
{70, 40, 10, 50, 20, 60, 30}
s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

# intersection(): 교집합을 계산하여 반환
result1 = s3.intersection(s4)
print(result1)

result2 = s3 & s4
print(result2)
{40, 50, 30}
{40, 50, 30}
s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

# difference(): 차집합을 계산하여 반환
result1 = s3.difference(s4)
print(result1)

result2 = s3 - s4
print(result2)
{10, 20}
{10, 20}

→ 차집합은 순서가 중요하다.
result1 = s3.difference(s4) 와 result2 = s3 - s4 코드에서 s3에서 s4를 차집합하는 것이므로 그에 따른 결과가 출력된다.

s3 = {10, 20, 30, 40, 50}
s4 = {30, 40, 50, 60, 70}

# symmetric_difference(): 대칭 차집합을 계산하여 반환
result1 = s3.symmetric_difference(s4)
print(result1)

result2 = s3 ^ s4
print(result2)
{20, 70, 10, 60}
{20, 70, 10, 60}

✔ 다시 정리해보기!

  • 세트(set)는 중복되지 않는 항목들순서가 없는 컬렉션이다.
  • 세트는 중괄호 {}를 사용하여 생성.
  • 데이터가 없으면 dict으로 본다. dict가 set보다 우선이다.

메소드

  • add() : 세트의 요소 추가
  • update() : 세트에 여러 요소 추가
  • ✨ remove() : 세트 요소 제거. 단 요소가 없으면 에러 발생
  • ✨ discard() : 세트 요소 제거. 요소 없어도 에러 발생 X
  • copy() : 세트 복사

  • union() : 합집합 계산하여 반환
  • intersection() : 교집합 계산하여 반환
  • difference() : 차집합 계산하여 반환
  • symmetric_difference() : 대칭 차집합을 계산하여 반환
profile
The light shines in the darkness.

0개의 댓글