• 회원가입
  • 로그인
  • 구글아이디로 로그인

[basic] Python - Set (셋/세트) - '순서(=색인)' 없고, 중복 허용 않는 데이터 모음.

2972  

목차

  1. Set 개념
  2. 빈 Set 생성
  3. 데이터 있는 Set 생성
  4. Set 요소 접근/출력
  5. Set 요소 변경
  6. Set 요소 추가
  7. Set 요소 개수 (= Set 길이)
  8. Set 요소 제거
  9. Set 결합
  10. Set에 함수 적용
  11. 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을 업데이트.

 



분류 제목
basic Python - Home (입문) - 이념 / 추천 링크
basic Python - Intro (소개) - 용도・특징
basic Python - Start (시작) - 파이썬 설치/실행/버전확인
basic Python - Syntax (구문) - 들여쓰기・변수・주석
basic Python - Comment (주석)
basic Python - Variable (변수)
basic Python - DataType (데이터타입) - 자료형
basic Python - Number (숫자)
basic Python - Casting (데이터 타입 변경) - 자료형 변환
basic Python - String (문자열) ★ ※ 색인번호 (= 인덱스) 개념.
basic Python - Boolean (참거짓)
basic Python - Operator (연산자)
basic Python - List (리스트) ★ - 변경 가능한 모음
basic Python - Tuple (투플/튜플) - 변경 불가 모음
basic Python - Set (셋/세트) - '순서(=색인)' 없고, 중복 허용 않는 데이터 모음.
basic Python - Dictionary (딕셔너리) - Key:value 쌍으로 구성된 모음
basic Python - if...elif...else - (이프조건문) ※ 3항연산자 = 삼항연산자
basic Python - While (와일반복문) - 와일문
basic Python - For (포반복문) ★★★★★
basic Python - Function (함수)
1/24
목록
찾아주셔서 감사합니다. Since 2012