파이썬/개념

[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] CH07. 세트와 딕셔너리

2024. 11. 17. 12:07
728x90

Section 01 세트

 

 파이썬에서 세트(set)는 수학에서의 집합의 개념과 같으며, 순서가 없으면서 중복을 허용하지 않는 자료구조를 의미한다. 세트는 주로 멤버 검사와 중복된 항목을 제거할 때 유용한 자료구조이다.

세트는 순서가 없기 때문에 인덱스를 통한 접근이 허용되지 않는다. 시퀀스 자료형에서 허용되는 인덱싱, 슬라이싱, 연결, 반복 등의 기능이 세트에서는 제공되지 않는다.

 대부분의 내장함수들은 세트에 적용 가능하다.

 

 

 

1. 세트의 생성

 세트는 '{}'을 사용하여 생성할 수 있다. 또한 다른 자료형의 데이터를 set() 함수를 사용하여 세트를 생성할 수 있다. 세트는 중복을 허용하지 않기 때문에 생성 시 중복된 데이터가 입력되어도 하나의 데이터로 간주한다.

 세트는 다른 자료형의 데이터를 변환하여 생성할 수 있자만, 세트로 생성할 수 있는 자료형은 변하지 않는(immutable) 정수, 실수, 복소수, 부울형, 문자열, 튜플 자료형만 가능하다.

num = {'one', 'two', 'three'}
num # 순서대로 출력
# {'two', 'three', 'one'}

num = {3,2,1,3,4,2,1}
num # 중복이 제거되 세트로 생성
# {1, 2, 3, 4}
len(num) # num의 길이
# 4

set1 = set() # 비어 있는 세트
set1 # 공세트
# set()
len(set1) # 세트의 길이
# 0

 

 set() 함수를 사용하면 리스트, 문자열, 튜플을 세트로 생성할 수 있다.

s1 = {1,2,3,(1,2,3),4}
s1
# {1, 2, 3, 4, (1, 2, 3)]
len(s1) # s1의 길이
# 5

s2 = {1,2,3,(2,2,2),4}
s2
# {1, 2, 3, 4, (2,2,2)}

s3 = {1,2,3,[2,2,2],4} # 리스트 불가, 오류 발생

 

 

 

2. 세트 메소드

 세트는 생성된 후에 변경될 수 있는(mutable) 자료형이다.

 

 

세트 원소의 추가, 삭제

s1 = {1,2,3,4,5}

s1.add(6) # 6 추가
s1.discard(1) # 1 삭제
s1.remove(3) # 3 삭제
# 없는 요소를 삭제하면 Key error 발생

s1
# {2, 4, 5, 6}


num = s1.pop() # 세트에서 임의의 요소 1개를 삭제하고 반환
num
# 2
set1 = {100,200,300,400}
set2 = set.copy() # 세트 주소를 복사하여 새로운 세트를 만들어 반환
# 두 개의 객체는 서로 다른 객체

set12.add(500) # set2에만 500 추가
set1, set2
# ({400, 100, 300, 200}, {100, 200, 300, 400, 500})


s1 = {1,2,3}
s2 = s1 # 두 개의 객체는 같은 객체

s1.add(4) # s1에만 4 추가(동일한 객체이므로 s2에도 추가)
s1, s2
# ({1, 2, 3, 4}, {1, 2, 3, 4})

s1.clear() # 모든 요소 삭제
s1, s2
# (set(), set())

set1.clear() # 모든 요소 삭제(set는 삭제되지 않음)
set1, set2
# (set(), {100, 200, 300, 400, 500})

 

 

세트 연산 메소드

s1 = {1,2,3}
s2 = {3,2,1,}
s3 = {1,2,3,4,5}

s1 == s2 # True

# s1이 s3의 부분 세트인가?
s1 < s3
s1.issubset(s3)
# True

# s3이 s1의 상위 세트인가?
s3 > s1
s3.issuperset(s1)
# True

5 in s3 # 세트의 요소인가? True
s1 = {1,2,3}
s2 = {3,4,5}

# 합집합
s1 | s2
s1.union(s2)
# {1, 2, 3, 4, 5}

# 교집합
s1 & s2
s1.intersection(s2)
# {3}

# 차집합
s1 - s2
s1.difference(s2)
# {1, 2}

 

 

 

 

 


 

 

 

 

 

Section 02 딕셔너리

 

 딕셔너리(dictionary)는 키(key)와 값을 하나의 요소로 묶어 표현한 자료구조이다. 다양한 요소들이 키와 값으로 지정될 수 있지만, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.

 딕셔너리는 세트처럼 순서가 없는 자료형이기 때문에 인덱스를 통한 접근이 되지 않는다. 시퀀스 자료형에서 허용되는 인덱싱, 슬라이싱, 연결, 반복 등의 기능이 딕셔너리에서는 제공되지 않는다.

 딕셔너리에서의 자료에 대한 접근은 대부분 키에 의해서 이루어진다.

 

 

 

1. 딕셔너리의 생성과 사용

sungjuk = {2195111:98, 2195113:88, 2195098:100} # 딕셔너리 생성
num = {1:"a", 2:"b", 1:"c", 2:"d"} # 중복될 수 없으므로 뒤에 입력된 값으로 생성
empty = dict() # 빈 딕셔너리 생성
list1 = [[1, '하나'], [2, '둘'], [3, '셋']]
dict1 = dict(list1)

list2 = [[1,2,3], [4,5,6], [7,8,9]]
dict2 = dict(list2) # 오류 발생

list3 = [2019111, 2019112, 2019113]
list4 = [99,88,100]
dict3 = dict(zip(list3, list4)) # {2019111:98, 2019113:88, 2019113:100}
dict1 = {1:'one', 2:'two', 3:'three'}

dict1[1] # 키가 1인 요소의 값, 'one'
dict1[4] = 'four' # 새로운 요소 삽입
del dict1[1] # 키 값이 1인 요소 삭제

dict1
# {2:'two', 3:'three', 4:'four'}

del dict1 # 딕셔너리 자체 삭제
dict1 = {1:'one', 2:'two', 3:'three'}

1 in dict1 # 딕셔너리에 키 값 1이 존재하는지 확인, True
'one' in dict1 # 키 값만 사용 가능, False

for i in dict1:
	print(dict1[i])
# one
# two
# three

max(dict1) # 키 값 중 가장 큰 값, 3

sum(dict1) # 키 값의 합, 6

 

 

 

2. 딕셔너리 메소드

 딕셔너리는 생성된 후에 변경될 수 있는(nutable) 자료형이다.

 

 

딕셔너리의 값을 검색, 복사, 삭제

dict1 = {1:'one', 2:'two', 3:'three'}

dict1.get(3) # 키 값을 지정하여 값을 검색
# 'three'
# 없는 키 값 지정하면 None 반환
dict1. get(4, 'four') # 키 값이 없을 경우 지정된 값 반환
# 'four'

dict2 = dict1.copy() # 복사
dict3 = dict1 # 대입(같은 객체 의미)
dict2.clear() # 딕셔너리의 모든 요소 삭제

 

 

딕셔너리에 값을 추가, 요소 삭제, 딕셔너리 합치기

dict1 = {1: 'one', 2: 'two', 3: 'three'}

# 'four' 추가
dict1.setdefault(4, 'four')

# setdefault() 메소드는 키가 이미 존재하면 아무것도 하지 않음
dict1.setdefault(1, 'ONE')

# 키 2에 해당하는 값을 제거하고 반환
num2 = dict1.pop(2)

# 임의의 (키, 값) 쌍을 제거하고 반환
removed_item = dict1.popitem()

# 기존 딕셔너리에 새 쌍을 추가하거나 기존 값을 업데이트
dict1.update({5: 'five', 3: 'THREE'})

 

 

for 문에서 딕셔너리 사용하기

dict1 = {1:'one', 2:'two', 3:'three'}

for num in dict1.keys(): # 딕셔너리의 모든 키 값 반복 처리
	print(num1, end = ' ')
# 결과; 1 2 3

for alpanum in dict1.values(): # 딕셔너리의 값 반복 처리
	print(alpanum, end = ' ')
# 결과; one two three

for num, alpanum in dict1.items(): # 딕셔너리 값 반복 처리
	print(print(num, '은 영어로 :', alpanum, '   ', end = ' ')
# 결과; 1 은 영어로 : one   2 은 영어로 : two   3 은 영어로 : three