Python: 자료형 세트 (set)

13686 단어 pythonpython

set

  • 집합을 표현한다.
  • 합집합, 교집합, 차집합 등의 연산이 가능하다.
  • 세트는 중복 값을 허용하지 않는다.
  • 순서가 보장되지 않는다. 출력하면 매번 요소가 다른 순서로 나온다.
  • 순서가 보장되지 않기 때문에, 인덱스가 존재하지 않는다.
  • 리스트, 튜플, 딕셔너리와 달리 []로 특정 요소만 출력할 수 없다.
  • 세트에 특정 값이 있는지 확인하기 위해서는 in 연산자를 사용한다.

세트 만들기

  • {}(중괄호) 안에 값을 저장하며, 각 값은 ,(쉼표)로 구분해준다.
set_t1 = {}
set_t2 = set([iterable])

mamamoo = {"솔라", "휘인", "화사", "문별", "제니"}

a = set('apple') 
# {'e', 'l', 'a', 'p'}
  • 세트는 {}를 사용하지만, 초기값으로 {}를 사용하면 dictionary가 되므로 주의해야 한다.
  • set() 함수를 사용해서 set 를 만들기 위해서는 list 를 파라미터로 넘겨야한다.

특정 값 존재 확인

mamamoo = {"솔라", "휘인", "화사", "문별", "제니"}

if "솔라" in mamamoo:
	print("yes")

# 결과 값은 True, False 

if "사나" not in mamamoo:
	print("yes")

# not in 연산자 사용하여 특정 값이 없는지 확인

set in set

  • 세트는 다른 자료형(list, dictionary, tuple)과 같이 세트 안에 세트를 넣을 수 없다.

frozen set (프로즌 세트)

업데이트 예정


세트 연산

합집합

  • 세트1 | 세트2
  • set.union(세트1, 세트2)
m = {"솔라", "휘인", "화사", "문별", "제니"}
t = set(["솔라", "휘인", "제니"])

print(m | t)
print(m.union(t))

# 실행 결과
{'화사', '제니', '솔라', '휘인', '문별'}
{'화사', '제니', '솔라', '휘인', '문별'}

교집합

  • 세트1 & 세트2
  • set.intersection(세트1, 세트2)
m = {"솔라", "휘인", "화사", "문별", "제니"}
t = set(["솔라", "휘인", "제니"])

print(m & t)
print(m.intersection(t))

# 실행 결과
{'휘인', '제니', '솔라'}
{'휘인', '제니', '솔라'}

차집합

  • 세트1 - 세트2
  • set.difference(세트1, 세트2)
m = {"솔라", "휘인", "화사", "문별", "제니"}
t = set(["솔라", "휘인", "제니"])

print(m - t)
print(m.difference(t))

# 실행 결과
{'문별', '화사'}
{'문별', '화사'}

대차집합

  • 세트1 ^ 세트2
  • set.symmetric_difference(세트1, 세트2)

두 집합 중 겹치지 않은 요소만 포함한다.

m = {"솔라", "휘인", "화사", "문별", "제니"}
t = set(["솔라", "휘인", "제니", "로제"])

print(m - t)
print(m.difference(t))

# 실행 결과
{'문별', '화사', '로제'}
{'문별', '화사', '로제'}

집합 연산 후 할당 연산자 사용

집합 연순 후 할당 연산자 = 를 사용하여 결과를 변수에 할당한다.

연산식메서드
세트1 |= 세트2세트1.update(세트2)
세트1 \&= 세트2세트1.intersection_update(세트2)
세트1 -= 세트2세트1.difference_update(세트2)
세트1 \^= 세트2세트1.symmetric_difference_update(세트2)

부분집합과 상위집합 확인, 같은지 다른지 확인

연산의 결과는 Boolean 으로 나온다.

연산식메서드설명
현재세트 <= 다른세트현재세트.issubset(다른세트)현재 세트가 다른 세트의 부분 집합인지
현재세트 < 다른세트(메서드 없음)진부분집합인지 확인
현재세트 >= 다른세트현재세트.issuperset(다른세트)다른 세트의 상위 집합인지 확이
현재세트 > 다른세트(메서드 없음)현재 세트가 다른 세트의 진상위집합인지 확인
현재세트 == 다른세트(메서드 없음)같으면 True, 다르면 False. 순서가 없으므로 요소만 같으면 참.
현재세트 != 다른세트(메서드 없음)같으면 True, 다르면 False. 순서가 없으므로 요소가 다르면 참.
(연산식 없음)현재세트.isdisjoint(다른세트)현재 세트가 다른 세트와 겹치지 않는지 확인

세트 조작하기

  • add(x)
    세트에 요소를 추가한다.

  • remove(x)
    세트에서 특정 요소를 삭제하고 요소가 없으면 에러를 발생시킨다.

  • discard(x)
    세트에서 특정 요소를 삭제하고, 요소가 없으면 그냥 넘어간다.

  • pop()
    세트에서 임의의 요소를 삭제하고 해당 요소를 반환한다. 요소가 없다면 에러를 발생시킨다.

  • clear()
    세트에서 모든 요소를 삭제한다.

  • len(set_variable)
    세트의 길이를 구한다.

  • copy(set)
    기존의 세트를 복사하여 새로운 세트를 만든다.


세트 표현식

  • {식 for 변수 in 반복가능한객체}
  • set(식 for 변수 in 반복가능한객체)
  • {식 for 변수 in 세트 if 조건식}
  • set(식 for 변수 in 세트 if 조건식)

--업데이트

좋은 웹페이지 즐겨찾기