8장. 효과적인 자료형 tuple형, set형, dictionary형
8.1. tuple형
▪ (“홍길동”, 25, “율도국”,”왕”), (“이순신”,43,”조선국”,”장군”) 과 같 은 서로 다른 형의 element 를 가지는 자료형을 선언해서 element 를 뽑아내게나 복사하고 싶다
▪ list 형 중에서 원소를 변경할 수 없게 만들고 싶다
2
tuple의 타입과 선언
8.1. tuple형
▪ 변경 불가능한 선형 자료구조
• 본질적으로 list와 매우 유사한 구조
— element로 구성, 순서(sequence)가 존재
— list와 구분하기 위해 소괄호로 표기함
( ) tuple형의 기호
Variable_name = (element_1, element_2…)
tuple의 선언 예
4
8.1. tuple형
▪ 동일한 자료형을 원소로 갖는 tuple
• (1,2), (‘one’,’two’,’three’,’four’)
▪ 혼용 자료형을 원소로 갖는 tuple
• (1 , 2 , [1,2],[2,3,4,],(‘W’,’M’))
▪ 빈 tuple
• ( )
▪ 변수로 할당하여 생성
• month = (‘Jan’,Feb’ ... ‘Dec’)
• days = (‘Mon’,’Tue’...’Sun’)
▪ list로부터 tuple 생성가능
하나의 원소를 갖는 tuple
8.1. tuple형
▪ tuple의 원소는 어떤 타입도 가능하다.
▪ tuple 내부는 “,”로 원소를 구분한다.
• int 타입의 한 원소만 가지고 있는 경우,
– t = (1) 으로 적기 쉬우나 , 이런 경우 t은 정수 1을 할당 받게 되어 tuple 형이 아니다.
– t = (1, )으로 적어야 t이 1이라는 원소 하나를 가진 tuple이 된다.
>>> t = (1)
>>> t 1
>>> t = (1, )
>>> t
(1, )
tuple의 연산
6
8.1. tuple형
▪ tuple은 slice가 가능하다
▪ tuple은 합병(concatenate)이 가능하다
▪ tuple은 곱(iteration)이 가능하다
>>> t1[1:2]
(2,14)
>>> t2 = (‘love’,)
‘love’
>>> t2[0:]
(‘love’,)
>>> t1 = (‘valentine’, 2, 14, ‘gift’)
>>> t2 = (‘love’, )
>>> t3 = t1 + t2
>>> t3
(‘valentine’, 2, 14, ‘gift’, ‘love’)
>>> print(t2*3)
(‘love’, ‘love’, ‘love’)
>>> print(t1*2)
(‘valentine’, 2, 14, ‘gift’, ‘valentine’, 2, 14, ‘gift’)
tuple의 연산
8.1. tuple형
▪ list 사용시 활용했던 함수들 tuple에서 사용 가능
▪ len() 함수
▪ min() 함수
▪ max() 함수
[가정]
>>> t1 =(1,2,3,5,7,11)
>>> t2 =(‘love’,’power’,’peace’)
>>> len(t1) 6
>>> len(t2) 3
>>> min(t1) 1
>>> min(t2) love
>>> max(t1) 11
>>> max(t2)
tuple과 list의 비교
8
8.1. tuple형
[예제 8-1] tuple형과 list의 비교
8.1. tuple형
[예제 8-1] tuple형과 list의 비교
10
8.1. tuple형
[실습 8-1] tuple형과 list의 비교
8.1. tuple형
● 문제 해결 알고리즘
● 테스트
한 중학교에서는 평소 영어, 수학, 과학, 사회 이 4가지 과목을 시험을 본다. 하지만 올해에만 수학시험 을 과제로 대체하기로 하였다. 이때, 수학 과목만 ‘과제’로 대체한 리스트를 출력하는 프로그램을 작성하 라. 단, 원래 과목 목록은 변하지 않는다.
영어, 수학, 과학, 사회의 과목을 tuple로 작성한다.
>>>thisyear_test
['영어', '과제', '수학', '사회']
>>>test
('영어', '수학', '과학', '사회')
12
[퀴즈 8-1]
8.1. tuple형
▪ 다음 요구사항에 따라 프로그램을 작성해보자.
I 요구사항 I
아래의 string형과 list형으로부터 tuple을 생성하여라.
str_red = 'Red'
list_color = ['Red', 'Yellow', 'Orange']
8장. 효과적인 자료형 tuple형, set형, dictionary형
8.2. set형
set형의 생성
8.2. set형
▪ set은 집합에 관련된 자료 형
▪ 데이터의 중복이 없다
▪ 순서가 없다
{ } set 기호
Variable_name = {element_1, element_2…}
• element에는 string, list, tuple 등이 올 수 있다.
set의 선언 예
16
8.2. set형
▪ 동일한 자료형을 원소로 갖는 set
• {‘I’,’you’,’she’,’he’}, {[1,2], [3,4] }
▪ 혼용 자료형을 원소로 갖는 set
• {('spring','summer','fall','winter'), 1, 2, 3, 4}
▪ 빈 set
• { }
▪ 변수로 할당하여 생성
• odd_num = {1, 3, 5, 7}
• fruit = {‘apple’, ‘banana’, ‘peach’}
▪ list와 tuple을 기반으로도 생성가능
•
>>>
set_hello = set(‘hello’)>>>
set_hello {‘o’,‘h’,‘e’,‘l’}•
>>>
set_number = set([1,2,3,4,5])>>>
set_number{2,1,3,4,5}
set형의 특징
8.2. set형
▪ set은 중복을 허용하지 않는다.
▪ set은 순서가 없다
▪ set에서 중요한 것은 어떠한 원소가 존재하는지에 대한 여부
>>> color_list = ['red','blue','red','green','pink','blue','black']
>>> color_list
['red', 'blue', 'red', 'green', 'pink', 'blue', 'black']
>>> color_set = set(color_list)
>>> color_set
{'blue', 'red', 'green', 'pink', 'black'}
>>>
set형의 함수 사용
18
8.2. set형
▪ list와 tuple에서 사용했던 함수들 사용 가능
▪ len() 함수
▪ min() 함수
▪ max() 함수
>>> len(set_number) 5
>>> len(set_word) 3
[가정]
>>> set_number = {1,2,3,4,5}
>>> set_word = {‘one’, ‘two’, ‘three’}
>>> min(set_number) 1
>>> min(set_word)
‘one’
>>> max(set_number) 5
>>> max(set_word)
‘two’
set형의 연산자 사용
8.2. set형
▪ 수학에서 사용하는 집합연산 사용가능
▪ 특정원소 포함되어있는지 확인 가능
▪ set의 교집합 연산 : &
▪ set의 합집합 연산 : |
▪ set의 차집합 연산 : -
[가정]
>>> s1 = {0,1,2,3,4}
>>> s2 = {3,4,5,6,7}
>>> s1 & s2 {3,4}
>>> s1 | s2
{0,1,2,3,4,5,6,7}
>>> s1 - s2 {0,1,2}
set형의 연산자 사용
20
8.2. set형
▪ 특정 원소가 set에 있는지 확인하는 연산 : in
▪ slice 연산은 set에서 사용 불가
• index 구조가 아니기 때문
>>>s1 = set{'red','yellow','green','blue'}
>>> 'red' in s1
>>> True
>>> 'white' in s1
>>> False
[예제 8-2] set연산
8.2. set형
[예제 8-2] set연산
22
8.2. set형
[예제 8-3] set연산
8.2. set형
[예제 8-3] set연산
24
8.2. set형
8장. 효과적인 자료형 tuple형, set형, dictionary형
8.3. dictionary형
dictionary 정의
26
8.3. dictionary형
▪ 사전과 비슷한 형식의 자료형
• 단어를 통해 뜻을 구하는 경우
• 예) 영어 단어를 통해 그에 해당하는 한국어 단어를 구하는 경우 – apple : 사과
{key1:value1,
key2:value2,..} dictionary의 요소는 한 쌍의 key : value로 표현
apple 사과
key value
value 값이 될 수 있는 자료형
8.3. dictionary형
>>> price = {(‘오뎅‘:’2000원’,'떡볶이‘:’3000원’)
>>> price[‘오뎅‘] = ‘1000원‘
>>> price
{'오뎅’: ‘1000원‘,’떡볶이‘:'3000원'}
▪ 모든 자료형이 사용가능
• dictionary 원소의 value값은 할당문에 의해 변경
▪ key값은 중복 되면 안됨
• 하나를 제외한 나머지 key값은 무시
– 어떤 key값이 무시 될지 예측 불가능
key가 될 수 있는 자료형
28
8.3. dictionary형
▪ 변경 할 수 없는 자료형만 dictionary의 key가 될 수 있음
▪ list를 key 값으로 사용한 경우
▪ tuple을 key값으로 사용한 경우
>>> price = {['떡볶이','김밥']:'3000원',['라면','만두']:'4000원'}
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
price = {['떡볶이','김밥']:'3000원',['라면','만두']:'4000원'}
TypeError: unhashable type: 'list'
>>> price = {('떡볶이','김밥'):'3000원',('라면','만두'):'4000원'}
>>> price
{('라면', '만두'): '4000원', ('떡볶이', '김밥'): '3000원'}
list와 tuple 구조와 dictionary 구조의 비교
8.3. dictionary형
▪ list와 tuple의 구조
▪ dictionary구조는 index 값이 아닌 key값으로 value 찾을 수 있음
>>> D = {‘spring’:’봄’, ‘summer’:’여름’, ‘fall’:’가을’, ‘winter’:’겨울’}
summer 여름 spring 봄
key value
winter 겨울
fall 가을
>>> L = [2, 4, 6, 8, 10] #list
>>> T = (2, 4, 6, 8, 10) #tuple
2 4 6 8 10
Index0 Index1 Index2 index3 Index4
L
T 2 4 6 8 10
Index0 Index1 Index2 index3 Index4
list와 tuple 구조와 dictionary 구조의 비교
30
8.3. dictionary형
▪ dictionary 원소는 순서가 정해져 있지 않음
>>> number = {1:’one’, 2:’two’, 3:’three’, 4:’four’, 5:’five’}
>>> number
{ 2:’two’, 1:’one’,4:’four’, 3:’three’, 5:’five’}
list와 tuple 구조와 dictionary 구조의 비교
8.3. dictionary형
▪ list, tuple, set과 마찬가지로 함수 활용 가능
▪ dictionary에 새로운 항목을 추가하는 함수
▪ dictionary에 존재하는 원소를 삭제하는 함수
>>>price = { ‘떡볶이’ : ‘삼천원’ }
>>>price
{ ‘떡볶이’ : ‘삼천원’ }
>>>price[‘오뎅’] = ‘이천원’ #추가하기
>>>price
{ ‘떡볶이’ : ‘삼천원’, ‘오뎅’ : ‘이천원’ }
d[key] = value key와 value 쌍 추가
>>>food = { ‘분식’:[‘떡볶이’, ‘호떡’], ‘중식’:[‘짜장면’, ‘탕수육’] }
>>>food
{ '중식': ['짜장면', '탕수육'], '분식': ['떡볶이', '순대'] }
>>>del food[‘중식’] #삭제하기
del d[key] key와 결합된 구성원소 삭제
▪ key들로 이루어진 list를 리턴하는 메소드
▪ value들로 이루어진 list를 리턴하는 메소드
dictionary의 메소드
32
8.3. dictionary형
>>> information = { ‘name’ : ‘Lee Suji’, ‘height’ : ‘163’, ‘blood type’ : ‘B’ }
>>> information.keys()
dict_keys( [ ‘height’, ‘blood type’, ‘name’ ] )
d.keys() key들로 이루어진 list 리턴
>>> information = { ‘name’ : ‘Lee Suji’, ‘height’ : ‘163’, ‘blood type’ : ‘B’ }
>>> information.values()
dict_values( [ ‘163’, ‘B’, ‘Lee Suji’ ] )
d.values() value들로 이루어진 list 리턴
▪ key값과 그에 해당하는 value들의 쌍을 tuple로 리턴하는 메소드
▪ value들로 이루어진 list를 return하는 메소드
dictionary의 메소드
8.3. dictionary형
>>> information = { ‘name’ : ‘Lee Suji’, ‘height’ : ‘163’, ‘blood type’ : ‘B’ }
>>> information.items()
dict_keys( [ ( 'height', '163‘ ), ( 'blood type', 'B‘ ), ( 'name', ' Lee Suji‘ ) ] )
d.items() (key,value)로 이루어진 tuple 리턴
>>> information = { ‘name’ : ‘Lee Suji’, ‘height’ : ‘163’, ‘blood type’ : ‘B’ }
>>> information
{ 'height‘ : '163‘ , 'blood type‘ : 'B‘ , 'name‘ : ' Lee Suji‘ }
>>> information.clear()
>>> information { }
d.clear() 모든 요소들을 제거하고 초기화
[실습 8-2] dictionary 예제
34
8.3. dictionary형
● 문제 해결 알고리즘
● 테스트
● dictionary는 순서가 없으므로, 결과가 다르게 나올 수 있다.
어느 커피숍에는 메뉴가 4가지 있다. Americano, Cafe latte, Green Tea latte, Mocha latte 각 메뉴 의 가격은 2000원, 2500원, 3000원, 3500이다. 이 목록을 dictionary로 작성해보고 Americano와 Vanila latte가 있는지 없는지 확인해보자.
dictionary로 메뉴를 정의한다.
True False
[퀴즈 8-2]
8.3. dictionary형
▪ 다음 요구사항에 따라 프로그램을 작성해보자.
I 요구사항 I
어느 문구점에서는 여러 문구를 판다. 연필은 200원, 펜은 800원, 지우개는 500원, 자는 300원이다. 이 목록을 dictionary를 이용하여 작성해보고 가격만 list로 출력해보자.
요약
36
▪ tuple형은 list형의 구조와 사용이 거의 동일하다는 공통점이 있으나, 한 번 생성되면 원소의 변 경이 불가능하다는 차이점이 있다.
▪ set형은 집합과 관련된 자료형이다.
▪ dictionary형은 key와 value가 한 쌍을 이루는 원소로 이루어진 자료형이다.
[연습문제]
1. 아래의 예시를 보고 list형과 tuple형 중 선택하여 각각 빈칸을 채워보라.
2. list형과 tuple형은 index 구조이기 때문에 ( )과 ( )이 가능하다.
3. 맞으면 O, 틀리면 X를 표시하여라.
홈페이지에서 정보 수정 및 추가를 위해 사용할 수 있는 자료형은 ( )이고, 해킹으로 인한 정보 수정을 막기 위해 사용할 수 있는 자료형은 ( )이다.
[O, X문제]
• >>>tuple = ('Hello', 'My', 'name', 'is', '예슬')
>>>tuple[4] = '지수'
위의 프로그램을 실행했을 경우,
tuple의 원솟값은 ('Hello', 'My', 'name', 'is', '지수')이다. ( )
• tuple에서도 list와 같이 min() 함수, max() 함수를 사용할 수 있다. ( )
• tuple에서는 삽입, 삭제는 불가하나 원소의 순서 교체는 가능하다. ( )
• >>>arr = (35, 45, 2, 10, 11)
>>>arr[3]+arr[1]
위의 프로그램의 결과 값은 (10, 45)이다. ( )
[연습문제]
38
4. 다음은 주어진 list에서 중복된 원소를 제거하는 프로그램이다. 괄호 안에 들어갈 내용을 채우 시오.
5. dictionary형은 ( )와 ( )가 한 쌍을 이루는 원소로 구성되어있다.
6. arr=(1, 2, 3)이 선언되었다고 할 때, arr[1]과 arr[2]를 바꾼 list인 brr를 생성하기 위한 프로그램 을 작성하라. (단, brr는 직접적인 숫자 입력 방식의 원소 할당불가)
7. 어느 교실 학생들의 수학 점수는 10, 9, 9, 6, 7, 6, 8, 9이다. 이 학생들이 어떤 점수를 받았는지 확인할 수 있는 프로그램을 작성하라.
8. 아래의 색칠한 그림 영역에 해당하는 원소를 추출하는 프로그램을 작성하시오.
animal_list = ['dog', 'pig', 'tiger', 'eagle', 'cat', 'dog', 'pig', 'lion']
animal_set = ( )(animal_list) new_animal_list = list(animal_set)
[연습문제]
9. 어느 커피숍에는 메뉴가 4가지 있다. Americano, Cafe latte, Green Tea latte, Mocha latte 각 메뉴의 가격은 2,000원, 2,500원, 3,000원, 3,500원이다. 이 목록을 dictionary로 작성해보고 Americano와 Vanila latte가 있는지 없는지 확인해보자.
10. 어느 식당의 메뉴와 가격은 돈가스 5,000원, 생선가스 5,500원, 우동 2,500원, 초밥 세트 9,000원이다. 이 메뉴들을 dictionary를 이용하여 작성해보고 각각의 메뉴와 가격을 순차적으 로 출력하는 프로그램을 작성하여 보자.
11. 집합 A={4,3,2,7,8,10,1,9}와 집합 B={0,1,3,5,6,8,9,10,4}가 있다. 이때, 집합 A가 집합 B의 부분집합인지 확인하고 아닐 경우 이 두 집합의 합집합을 구하는 프로그램을 작성하라.
[연습문제]
40
13. 영수의 집에 과일이 아래 표와 같이 있을 때, 5개 이하인 과일은 5개가 되도록 사려고 할 때, 사 야 할 과일과 그에 드는 각각의 비용과 총비용을 출력하는 프로그램을 작성하라.
14. 한 판매 회사에서는 판매 실적 점수와 고객 평가 점수를 통해 우수 제품을 선발하고자 한다. 아 래와 같이 결과가 나왔을 때, 판매 실적 점수가 4 이상이고 고객 평가 점수가 4 이상인 제품은 우수 제품이 되고, 두 점수 모두 4 미만인 제품은 판매중지 목록에 들어가게 된다. 이때, 우수 제품을 출력하고 로션이 판매 중지에 해당하는지 판단하는 프로그램을 작성하라.
과일 명 가격 개수
배 2000 3
사과 1500 5
딸기 1800 2
참외 2300 5
제품 명 판매실적 고객평가
비누 3 2
칫솔 5 4
샴푸 2 1
치약 4 4
로션 5 3
[연습문제]
15. 어느 문구점에서 판매하는 연필은 200원, 펜은 800원, 지우개는 500원, 자는 300원이다. 이 목록을 dictionary형을 이용하여 작성해보고 가격만 list형으로 출력해보자.