목차
- Set 개념
- 빈 Set 생성
- 데이터 있는 Set 생성
- Set 요소 접근/출력
- Set 요소 변경
- Set 요소 추가
- Set 요소 개수 (= Set 길이)
- Set 요소 제거
- Set 결합
- Set에 함수 적용
- Set 메서드 종류
Set 개념
순서 X, 색인 X, 변경 X, 추가 O, 제거 O, 중복 X, 중괄호 {} 이용 자료 집합.
(예) {'HTML', 'CSS', 'JS'}
[특징]
1. 중괄호 {} 이용해 표현.
2. 순서 없음. (= 색인 없음.)
3. 출력 시, 중복 허용 X.
4. 출력 시, 순서 랜덤.
[예제1] 중괄호 사용. / 출력 시 중복 비허용. / 순서 랜덤 출력.
code = {"HTML", "CSS", "JS", "HTML", "CSS"}
print(code)
결과값 예: {'CSS', 'HTML', 'JS'}
[예제2] 색인 없음. (그 결과, 색인 이용해 호출 시 에러 발생.)
code = {"HTML", "CSS", "JS", "HTML", "CSS"}
print(code[0]) # 에러 유발.
결과값: TypeError: 'set' object is not subscriptable
빈 Set 생성
방법1. 중괄호 {} 이용. ※ 주의: dict형으로 찍힘.
code = {}
print(code) # {}
print(type(code)) # <class 'dict'>
방법2. set() 함수 이용.
code = set()
print(code) # set()
print(type(code)) # <class 'set'>
데이터 있는 Set 생성
[방법1] 중괄호 {} 안에 데이터 나열.
code = {"HTML", "CSS", "JS"}
print(code) # {'HTML', 'CSS', 'JS'} ※ 순서는 랜덤.
print(type(code)) # <class 'set'>
[방법2] set() 함수 사용해 Set 생성 가능.
※ 데이터는 반드시 괄호 (소괄호, 중괄호, 대괄호)로 감싸야 함.
# 데이터를 괄호로 전혀 안 감싼 경우, 에러 발생.
code = set("HTML", "CSS", "JS")
print(code) # TypeError: set expected at most 1 argument, got 3
# 소괄호 감싼 경우 (= Tuple 형태의 데이터 경우)
code = set(("HTML", "CSS", "JS"))
print(code) # {'HTML', 'CSS', 'JS'} ※ 순서는 랜덤.
# 중괄호 감싼 경우 (= Set 형태의 데이터 경우)
code = set({"HTML", "CSS", "JS"})
print(code) # {'HTML', 'CSS', 'JS'} ※ 순서는 랜덤.
# 대괄호 감싼 경우 (= List 형태의 데이터 경우)
code = set(["HTML", "CSS", "JS"])
print(code) # {'HTML', 'CSS', 'JS'} ※ 순서는 랜덤.
Set 요소 접근/출력
색인번호나 Key를 이용해 Set의 각 Item에 접근 불가.
단, for...in... 반복문이나, in 키워드로 소속 체크 가능.
1. for...in... 반복문
code = {"HTML", "CSS", "JS"}
for x in code:
print(x)
결과값: (새로고침할 때마다 순서 다름.)
CSS
JS
HTML
2. in 키워드 : 지정 값이 Set에 있는지 체크
code = {"HTML", "CSS", "JS"}
print("HTML" in code)
결과값: True
Set 요소 변경
Set 생성되면, 변경 불가.
단, 추가는 가능.
[예제1] 색인 이용한 변경 불가.
code = {"HTML", "CSS", "JS"}
code[0] = "PHP" # 에러 유발. (∵ 순서 X, 색인 X)
print(code)
결과값: TypeError: 'set' object does not support item assignment
[예제2] Set → List → Set 과정 시, 변경은 되나 요소 특정은 불가.
code = {"HTML", "CSS", "JS"}
code = list(code)
code[0] = "PHP"
print(code)
결과값 예: 실행 때마다 결과값 바뀜.
['PHP', 'CSS', 'HTML']
Set 요소 추가
1. set.add() 메서드 - 1개 Item 추가.
code = {"HTML", "CSS", "JS"}
code.add("PHP")
print(code)
결과값: ※ 순서는 랜덤 출력.
{'HTML', 'CSS', 'JS', 'PHP'}
2. set.update() 메서드 : 2개 이상 아이템 추가.
주의: 추가할 Item들을 대괄호로 감싸야 함.
만약, 감싸지 않으면, 알파벳 낱개로 추가됨.
code = {"HTML", "CSS", "JS"}
code.update(["PHP", "SQL"])
print(code)
결과값: ※ 순서는 랜덤 출력.
{'CSS', 'HTML', 'JS', 'SQL', 'PHP'}
Set 요소 개수 (= Set 길이)
len() 함수 이용.
code = {"HTML", "CSS", "JS"}
print(len(code))
결과값: 3
Set 요소 제거
1. set.remove() 메서드 - 요소 지정해 제거.
주의: 제거할 요소 없으면 에러 발생 O.
code = {"HTML", "CSS", "JS"}
code.remove("JS")
print(code)
반환값: ※ 순서는 랜덤 출력.
['CSS', 'HTML']
2. set.discard() 메서드 ★ - 요소 지정해 제거.
주의: 제거할 요소 없어도 에러 발생 X. (Set을 랜덤순서로 출력.)
code = {"HTML", "CSS", "JS"}
code.discard("JS")
print(code)
반환값: ※ 순서는 랜덤 출력.
['CSS', 'HTML']
3. set.pop() 메서드 - Set의 마지막 요소 제거. (※ 제거된 요소 반환.)
주의: Set 순서는 랜덤이라, 삭제할 요소가 뭔지 알 수 없음.
code = {"HTML", "CSS", "JS"}
x = code.pop()
print(x)
print(code)
반환값: ※ 제거된 요소도, 출력된 Set 순서도 모두 랜덤 출력.
CSS
['HTML', 'JS']
4. set.clear() 메서드 - Set의 요소만 제거. (※ Set 자체는 유지.)
code = {"HTML", "CSS", "JS"}
code.clear()
print(code)
반환값: set()
5. del 키워드 - Set 자체를 삭제.
code = {"HTML", "CSS", "JS"}
del code # 에러 유발.
print(code)
결과값: 에러 발생. (∵ 출력할 Set 존재 X)
Set 결합
1. set.union() 메서드 - Set 결합.
code1 = {'HTML', 'CSS', 'JS'}
code2 = {'PHP', 'SQL'}
hz = code1.union(code2)
print(hz)
결과값: ※ 순서는 랜덤.
{'HTML', 'CSS', 'JS', 'PHP', 'SQL'}
2. set.update() 메서드 사용해 결합.
code1 = {"HTML", "CSS", "JS"}
code2 = {"PHP", "SQL"}
code1.update(code2)
print(code1)
결과값: ※ 순서는 랜덤 출력.
{'HTML', 'CSS', 'JS', 'PHP', 'SQL'}
1. union() 및 update() 메서드 모두 중복 Item은 제거 후 결합됨.
2. 그외 여러가지 결합 메서드 존재. (아래 Set 메서드 종류 참고)
(예1: 중복 Item만 결합), (예2: 중복 Item 빼고 결합)
Set에 함수 적용
※ 아래 함수는 List나 Tuple 모두에 사용 가능.
len() 함수 - 요소 개수 (= Set 길이)
max() 함수 - 최대값
min() 함수 - 최소값
sum() 함수 - 합산. (= 합계)
sorted() 함수 - 정렬. (오름차순/내림차순)
단, sorted() 결과값에 set() 함수 적용 시, 내림차순은 작동 안 함.
reversed() 함수 - 역순. (= 순서 뒤집기) 함수 경우, 에러 발생함.
len() 함수 - Tuple 길이. (= 요소 개수)
code = {"HTML", "CSS", "JS", "HTML", "CSS"}
print(len(code)) # 3 (∵ 중복 비허용)
max() 함수 - 최대값.
nums = {1, 2, 3, 2, 1}
print(max(nums)) # 3
min() 함수 - 최소값.
nums = {1, 2, 3, 2, 1}
print(min(nums)) # 1
sum() 함수 - 합계 (= 합산 = 총합)
nums = {1, 2, 3, 2, 1}
print(sum(nums)) # 6 (∵ 중복 비허용)
sorted() 함수 - (오름차순/내림차순) 정렬.
nums = {1, 2, 3, 2, 1}
# sorted() 함수만 적용 시, List 형태 결과값 반환.
print(sorted(nums)) # [1, 2, 3]
print(sorted(nums, reverse=True)) # [3, 2, 1]
# set() 함수를 추가로 적용해야 set 형태가 됨.
print(set(sorted(nums))) # {1, 2, 3}
단, 역순 경우, 작동 안 함. 그 결과, 오름차순으로 나옴.
print(set(sorted(nums, reverse=True))) # {1, 2, 3}
reversed() 함수 - 역순 (= 순서 뒤집기)는 적용 불가. 에러 발생.
nums = {1, 2, 3, 2, 1}
print(reversed(nums)) # 에러 유발.
결과값: TypeError: 'set' object is not reversible
Set 메서드 종류
set.add()
Set에 요소 추가.
cf.
List 경우, list.append() 메서드 이용.
set.clear()
Set에서 모든 요소 제거.
set.copy()
Set의 복사본 반환.
set.difference() ★
차집합 (= 특정 Set에 포함된 요소로만 구성된 Set) 반환.
※ - 연산자로 표현 가능. (예) Set3 = Set1 - Set2
set.difference_update()
이 Set에서 다른 지정된 Set에도 포함된 요소 제거.
set.discard()
지정 요소 제거.
PS. Set은 색인이 없어, 색인 기준 삭제는 불가.
set.intersection() ★
교집합 (= 모든 Set의 공통 요소로 구성된 Set) 반환.
set.intersection_update()
다른 지정된 Set엔 없는 이 Set의 요소 제거.
set.isdisjoint()
두 Set에 공통 요소 있는지 여부 반환.
set.issubset()
다른 Set가 이 Set을 포함하는지 여부 반환.
set.issuperset()
이 Set가 다른 Set을 포함하는지 여부 반환.
set.pop()
Set에서 요소 랜덤 제거.
set.remove()
set에서 지정 요소 제거.
set.symmetric_difference()
두 Set에 공통 요소 제외하고 결합한 Set 반환.
set.symmetric_difference_update()
두 Set의 공통 요소 제거 후 다른 요소만 삽입해 원래 Set 업데이트.
set.union() ★
합집합 (= 모든 Set의 요소를 한 번씩만 담은 Set) 반환.
※ | 연산자로 표현 가능. (예) Set3 = Set1 | Set2
set.update()
이 Set과 다른 Set의 합집합으로 Set을 업데이트.
최신댓글