Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
8장.�효과적인�자료형��tuple형,�set형,�dictionary형�
8.1.�tuple형
▪ (“홍길동”,�25,�“율도국”,”왕”),�(“이순신”,43,”조선국”,”장군”)�과�같은�서로�다른�형의�element�를�가지는�자료형을�선언해서�element�를�뽑아내게나�복사하고�싶다�
▪ list�형�중에서�원소를�변경할�수�없게�만들고�싶다
2
tuple의�타입과�선언
3
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
5
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의�연산
7
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) power
tuple과�list의�비교
8
8.1.�tuple형
[예제�8-1]�tuple형과�list의�비교
9
8.1.�tuple형
[예제�8-1]�tuple형과�list의�비교
10
8.1.�tuple형
[실습�8-1]�tuple형과�list의�비교
11
8.1.�tuple형
● 문제�해결�알고리즘�
● 테스트�
한�중학교에서는�평소�영어,�수학,�과학,�사회�이�4가지�과목을�시험을�본다.�하지만�올해에만�수학시험을�과제로�대체하기로�하였다.�이때,�수학�과목만�‘과제’로�대체한�리스트를�출력하는�프로그램을�작성하라.�단,�원래�과목�목록은�변하지�않는다.
영어,�수학,�과학,�사회의�과목을�tuple로�작성한다.
>>>thisyear_test�['영어',�'과제',�'수학',�'사회']�>>>test�('영어',�'수학',�'과학',�'사회')
12
[퀴즈�8-1]
13
8.1.�tuple형
▪ 다음�요구사항에�따라�프로그램을�작성해보자.
I�요구사항�I�아래의�string형과�list형으로부터�tuple을�생성하여라.�str_red�=�'Red'�list_color�=�['Red',�'Yellow',�'Orange']
8장.�효과적인�자료형��tuple형,�set형,�dictionary형�
8.2.�set형
set형의�생성
15
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형의�특징
17
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형의�연산자�사용
19
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연산
21
8.2.�set형
[예제�8-2]�set연산
22
8.2.�set형
[예제�8-3]�set연산
23
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�값이�될�수�있는�자료형
27
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 "", line 1, in price = {['떡볶이','김밥']:'3000원',['라면','만두']:'4000원'} TypeError: unhashable type: 'list'
>>> price = {('떡볶이','김밥'):'3000원',('라면','만두'):'4000원'} >>> price {('라면',�'만두'):�'4000원',�('떡볶이',�'김밥'):�'3000원'}
list와�tuple�구조와�dictionary�구조의�비교
29
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 10Index0 Index1 Index2 index3 Index4
L
T 2 4 6 8 10Index0 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�구조의�비교
31
8.3.�dictionary형
▪ list,�tuple,�set과�마찬가지로�함수�활용�가능�▪ dictionary에�새로운�항목을�추가하는�함수�
▪ dictionary에�존재하는�원소를�삭제하는�함수
>>>�price�=�{�‘떡볶이’�:�‘삼천원’�} >>>�price {�‘떡볶이’�:�‘삼천원’�}�>>>�price[‘오뎅’]�=�‘이천원’�� �#추가하기�>>>�price {�‘떡볶이’�:�‘삼천원’,�‘오뎅’�:�‘이천원’�}
d[key]�=�value key와�value�쌍�추가
>>>�food�=�{�‘분식’:[‘떡볶이’,�‘호떡’],�‘중식’:[‘짜장면’,�‘탕수육’]�} >>>�food {�'중식':�['짜장면',�'탕수육'],�'분식':�['떡볶이',�'순대']�}�>>>�del�food[‘중식’]�� � ����#삭제하기 >>>�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의�메소드
33
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]�
35
8.3.�dictionary형
▪ 다음�요구사항에�따라�프로그램을�작성해보자.
I�요구사항�I�어느�문구점에서는�여러�문구를�판다.�연필은�200원,�펜은�800원,�지우개는�500원,�자는�300원이다.�이�목록을�dictionary를�이용하여�작성해보고�가격만�list로�출력해보자.
요약
36
▪ tuple형은�list형의�구조와�사용이�거의�동일하다는�공통점이�있으나,�한�번�생성되면�원소의�변경이�불가능하다는�차이점이�있다.�
▪ set형은�집합과�관련된�자료형이다.�▪ dictionary형은�key와�value가�한�쌍을�이루는�원소로�이루어진�자료형이다.
[연습문제]
37
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)
[연습문제]
39
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
[연습문제]
41
15.어느�문구점에서�판매하는�연필은�200원,�펜은�800원,�지우개는�500원,�자는�300원이다.�이�목록을�dictionary형을�이용하여�작성해보고�가격만�list형으로�출력해보자.