일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- JoCoding
- ZOAC 2
- 세탁소 사장 동혁
- Pop
- 5와 6의 차이
- 전자 메일
- 소가 길을 건너간 이유3
- 그리디 알고리즘
- 백준
- 구현
- 욱제는 효도쟁이야!!
- 시저 암호화
- 컴퓨터 네트워크
- 나동빈
- 위치 암호화
- 파이썬
- Greedy
- 동적 계획 알고리즘
- 비연결형 통신
- DES 알고리즘
- 거스름돈
- 키워드 암호화
- 문자 변환표
- 2 + 1 세일
- 코딩 테스트
- 대체 암호화
- 한빛미디어
- 사과 담기 게임
- 컬럼 암호화
- 통나무 건너기
- Today
- Total
주니어로서의 백 걸음, 개발자로서의 한 걸음
파이썬 set자료형 본문
집합 자료형 set
집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형
집합 자료형
#빈 집합 자료형 선언
>>>s = set()
# 원소가 있는 집합 자료형 선언
>>>s1 = set([1, 2, 3])
>>>s2 = set({1, 2, 3})
>>>s3 = {1, 2, 3}
모두 같은 집합을 만든다.
#집합 자료형 연산
>>>s1 = set([1, 2, 3, 4, 5])
>>>s2 = set([3, 4, 5, 6, 7])
>>>print(s1 & s2) # 교집합
{3, 4, 5}
>>>print(s1 | s2) # 합집합
{1, 2, 3, 4, 5, 6, 7}
>>>print(s1 - s2) # 차집합
{1, 2}
#set()괄호 안에 문자열 입력
>>>s2 = set("Hello")
>>>s2
{'e', 'H', 'l', 'o'}
집합 자료형의 특징
위에서 살펴본 set('Hello")를 set자료형으로 만들면 'l' 문자가 하나 빠져있고 순서도 뒤죽박죽이다. 그 이유는 set에 다음과 같은 2가지 특징이 있다.
- 중복을 허용하지 않는다.
- 순서가 없다
중복을 허용하지 않는 특징 때문에 set은 중복을 제거하기 위한 필터로 종종 사용된다
set자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
>>>s1 = set([1, 2, 3])
>>>l1 = list(s1)
>>>l1
[1, 2, 3]
>>>l1[0]
1
>>>t1 = tuple(s1)
>>>t1
(1, 2, 3)
>>>t1[0]
1
집합 자료형 관련 함수들
- 값 1개 추가하기(add)
이미 만들어진 set자료형에 값을 추가할 수 있다.
1개의 값만 추가(add)할 경우에는 다음과 같이 한다.
>>>s1 = set([1, 2, 3])
>>>s1.add(4)
>>>s1
{1, 2, 3, 4}
- 값 여러 개 추가하기(update)
새로운 값을 여러 개 추가(update)할 경우에는 다음과 같이 한다.
>>>s1 = set([1, 2, 3])
>>>s1.update([4, 5, 6])
>>>s1
{1, 2, 3, 4, 5, 6}
- 특정 값 제거하기(remove, discard)
set자료형에서 특정 값을 제거할 때는 다음과 같이 한다.
>>>s1 = set([1, 2, 3])
>>>s1.remove(2)
>>>s1
{1, 3}
>>>s1.discard(2)
>>>s1
{1, 3}
- 임의의 원소를 제거하고 반환하기(pop)
set은 순서가 없으므로 임의의 값을 제거하고 반환하다.
set이 비어있으면 KeyError가 발생한다.
>>>s1 = set([1, 2, 3])
>>>s1.pop()
1
>>>s1
{2, 3}
- 모든 원소 제거하기(clear)
set의 모든 원소를 제거한다.
>>>s1 = set([1, 2, 3])
>>>s1.clear()
>>>s1
set()
- 특정 값이 set에 포함되어 있는지 확인하기(in)
해당 값이 set에 포함되어 있으면 True, 그렇지 않으면 False를 반환한다.
>>>s1 = set([1, 2, 3])
>>>print(2 in s1)
True
>>>print(4 in s1)
False
- set의 길이 구하기(len)
set의 길이를 반환하다.
>>>s1 = set([1, 2, 3])
>>>print(len(s1))
3
set자료형- 자료구조
파이썬 set자료형은 내부적으로 해시 테이블(Hash Table)을 사용하여 구현되어 있다.
해시 테이블은 값에 대한 인덱스를 계산하고 값을 저장하므로, 값을 찾는 데 걸리는 시간이 상수 시간에 가깝다. O(1).
반면에 리스트는 인덱스를 찾는 데에는 상수 시간이 걸리지만, 값이 있는지를 찾기 위해서는 리스트의 모든 요소를 반복적으로 탐색해야 한다. 따라서, 리스트에서 값을 찾는 데 걸리는 시간은 최악의 경우 리스트의 크기에 비례하다. O(n).
그러므로, set자료형은 요소를 찾는 데 걸리는 시간이 더 빠르기 때문에 리스트보다 시간 복잡도가 더 좋다. 또한 set은 중복된 값을 허용하지 않는 자료형이기 때문에 중복을 제거하거나 고유한 값만을 저장해야 하는 경우에 유용하다.