• Q&A
  • 회원가입
  • 로그인

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

목차

  1. Set 개념
  2. 빈 Set 생성.
  3. 데이터 있는 Set 생성.
  4. 요소 접근
  5. 요소 변경
  6. 요소 추가
  7. Set 길이 (= 요소 개수)
  8. 요소 제거
  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'} ※ 순서는 랜덤. 

 

 

요소 접근

 

색인번호나 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 생성되면, 변경 불가

단, 추가는 가능.

 


[예제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']

 


요소 추가

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 길이 (= 요소 개수)

len() 함수 이용.

 

code = {"HTML", "CSS", "JS"}

print(len(code))

 

결과값: 3

 

요소 제거

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을 업데이트.

 


오늘도 즐겁게 열심히 .....

찾아주셔서 감사합니다. Since 2012