Unit 26. 세트 사용하기
- 파이썬은 집합을 표현하는 세트(set)라는 자료형을 제공한다.
- 세트는 합집합, 교집합, 차집합 등의 연산이 가능하다.
1. 세트 만들기
- 세트는 { } (중괄호)안에 값을 저장하며 각 값은 , (콤마)로 구분해준다.
세트 = {값1, 값2, 값3}
>>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'} >>> fruits {'pineapple', 'orange', 'grape', 'strawberry', 'cherry'}
- 세트는 요소의 순서가 정해져 있지 않아서 세트를 출력해보면 매번 요소의 순서가 다르게 나온다.
- 세트에 들어가는 요소는 중복될 수 없기 때문에 세트에 'orange'를 두 개 넣어도 실제로는 한 개만 들어간다.
>>> fruits = {'orange', 'orange', 'cherry'} >>> fruits {'cherry', 'orange'}
- 특히 세트는 리스트, 튜플, 딕셔너리와 달리 [ ] (대괄호)로 특정 요소만 출력할 수는 없다.
- [ ] 로 특정 요소를 출력하려 했을 때 에러가 발생한다.>>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'} >>> print(fruits[0]) Traceback (most recent call last): File "<pyshell#42>", line 1, in <module> print(fruits[0]) TypeError: 'set' object does not support indexing >>> fruits['strawberry'] Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> fruits['strawberry'] TypeError: 'set' object is not subscriptable
1-1. 세트에 특정 값이 있는지 확인하기
- 세트에 특정 값이 있는지 확인하려면 지금까지 리스트, 튜플, 딕셔너리에 사용했던 in 연산자를 사용한다.
- 세트에 특정 값이 있으면 True, 없으면 False가 나온다.# 값 in 세트 >>> fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'} >>> 'orange' in fruits True >>> 'peach' in fruits False
- 반대로 in 앞에 not을 붙이면 특정 값이 없는지 확인할 수 있다.
- 반대로 not in은 특정 값이 없으면 True, 있으면 False가 나온다.# 값 not in 세트 >>> 'peach' not in fruits True >>> 'orange' not in fruits False
1-2. set를 사용하여 세트 만들기
- set 에는 반복 가능한 객체(iterable)를 넣는다.
set(반복가능한객체)
- set('apple')과 같이 영문 문자열을 세트로 만들면 'apple'에서 유일한 문자인 'a', 'p', 'l', 'e' 만 세트로 만들어지고, 중복된 문자는 포함되지 않는다.
>>> a = set('apple') # 유일한 문자만 세트로 만듦 >>> a {'e', 'l', 'a', 'p'}
- 그리고 set(range(5)) 와 같이 숫자를 만들어내는 range를 사용하면 0부터 4까지의 숫자를 가진 세트를 만들 수 있다.
>>> b = set(range(5)) >>> b {0, 1, 2, 3, 4}
- 빈 세트는 c = set() 와 같이 set에 아무것도 지정하지 않으면 된다.
>>> c = set() >>> c set()
- 단, 세트가 { }를 사용한다고 해서 c = { } 와 같이 만들면 빈 딕셔너리가 만들어지므로 주의해야 한다.
- 자료형의 자료는 type을 사용하여 알 수 있다.
# type(객체) >>> c = {} >>> type(c) <class 'dict'> >>> c = set() >>> type(c) <class 'set'>
※ 참고
1. 한글 문자열을 세트로 만들기
- set을 사용하여 한글 문자열을 세트로 만들면, 음절 단위로 세트가 만들어진다.
>>> set('안녕하세요') {'녕', '요', '안', '세', '하'} # 순서는 매번 다름
2. 세트 안에 세트 넣기
- 세트는 리스트, 딕셔너리와 달리 세트 안에 세트를 넣을 수 없다.
>>> a = {{1, 2}, {3, 4}} Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> a = {{1, 2}, {3, 4}} TypeError: unhashable type: 'set'
3. 프로즌 세트
- 파이썬은 말 그대로 얼어 있는 세트인 프로즌세트(frozenset), 즉 내용을 변경할 수 없는 세트도 제공한다.
프로즌세트 = frozenset(range(10))
>>> a = frozenset(range(10)) >>> a frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
- frozenset는 집합 연산과 메서드에서 요소를 추가하거나 삭제하는 연산, 메서드는 사용할 수 없다.
>>> a = frozenset(range(10)) >>> a |= 10 Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> a |= 10 TypeError: unsupported operand type(s) for |=: 'frozenset' and 'int' >>> a.update({10}) Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> a.update({10}) AttributeError: 'frozenset' object has no attribute 'update'
- frozenset는 세트 안에 세트를 넣고 싶을 때 사용한다.
- 이처럼 frozenset는 frozenset를 중첩해서 넣을 수 있는데, frozenset만 넣을 수 있고 일반 set는 넣을 수 없다.>>> frozenset({frozenset({1, 2}), frozenset({3, 4})}) frozenset({frozenset({1, 2}), frozenset({3, 4})})
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 26 정리(30) - 세트 조작 (0) | 2022.02.09 |
---|---|
파이썬 코딩도장 Unit 26 정리(2) - 집합 연산 (0) | 2022.02.08 |
파이썬 코딩도장 Unit 25 정리(4) - 중첩 딕셔너리, 딕셔너리의 할당과 복사 (0) | 2022.02.04 |
파이썬 코딩도장 Unit 25 정리(3) - 딕셔너리 표현식 사용 (0) | 2022.02.03 |
파이썬 코딩도장 Unit 25 정리(2) - 반복문으로 딕셔너리의 키-값 쌍을 모두 출력 (0) | 2022.02.02 |