41
8장. 효과적인 자료형 tuple형, set형, dictionary형 8.1. tuple형

제8장 효과적인 자료형(tuple형, set형, dictionary형)ž¥.pdf · 2018. 11. 12. · tuple의타입과선언 3 8.1.tuple형 변경불가능한선형자료구조 • 본질적으로list와매우유사한구조

  • 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형으로�출력해보자.