파이썬 자료형(2)


  • edwith 파이썬을 활용한 기초컴퓨터 프로그래밍 강의를 바탕으로 정리한 내용입니다.

지난 파이썬 자료형(1) 블로그에서는 변수 정의, 유형, 연산 그리고 입출력에 대해 알아보았다. 이번 파이썬 자료형(2)에서는 여러개의 데이터를 다룰 때 사용하는 자료형과 예제에 대해 다룰 예정이다.

1. 여러 개의 데이터 다루기

요일별 소비내역을 입력하는 간단한 가계부 프로그래밍을 만든다고 가정하자.

mon = 5000
tue = 5000
wed = 8000
thu = 10000
fri = 15000
sat = 5000
sun = 5000

위와 같이 각 요일 변수를 생성하고 각각의 값을 저장할 수 있다. 만약에 요일아니고 일자별로 기록하고 싶다면 365개의 변수를 생성해야한다. 위와 같은 방법을 사용한다면 엑셀이나 종이 가계부를 사용하는 것이 더 나을 것 같다.

다행이도(?) 파이썬에서는 하나의 변수에 여러개의 데이터를 담을 수 있는 자료형인 리스트딕셔너리 자료형을 제공하고 있다.

2. 리스트(List)

- 리스트 특징

  • 여러 개의 데이터를 일렬로 저장하고 순서번호 할당

    문자열 변수를 할 때도 순서번호를 할당해서 접근한다.

  • 문자열과 배열과 다른점은 ? 문자열과 배열은 원소의 값들이 모두 동일함
  • 하지만 리스트는 데이터타입이 동일할 필요 없음
  • 숫자형, 문자열, 다른 리스트도 포함 가능

- 리스트 정의 방법

리스트를 정의할 때는 대괄호[]를 이용하여 정의한다.

#일주일 간의 소비내역을 담는 리스트 변수 생성
money = [5000,5000,8000,10000,15000,5000,5000]

- 리스트 자료형 예시

리스트는 문자열, 배열과 다르게 문자,숫자,리스트를 원소값으로 사용할 수 있다.

empty = []
# 원소가 없는 리스트 : 처음에는 값이 없고 중간에 넣는 용도로 사용
number = [1,2,3]
# 숫자들을 포함하는 리스트
string=['new','face']
# 문자열들을 포함하는 리스트
numAndStr = [123,'new','face']
# 숫자, 문자를 포함하는 리스트
listOfList = [[1,2,3],['new','face',1]]
# 리스트를 포함하는 리스트

- 리스트 원소 불러오기

배열, 문자열의 경우와 마찬가지로 부여된 순서번호 (0부터 시작)로 접근한다.

#월요일 지출금액을 보자.
money[0]

리스트 원소 불러오기

평일 지출금액을 가져와보자. 변수명[시작위치:끝위치+1]

#월:0 ~ 금:4
money[0:5]

평일 지출금액 불러오기

- 리스트 내의 리스트

일주일 소비지출이 아닌 한달 소비지출을 기록한다고 해보자. 하나의 리스트 내에 30개의 데이터를 넣어보자.

month_money = [5000, 5000, 8000, 10000, 15000,5000, 5000, 8000, 10000, 15000,5000, 5000, 8000, 10000, 15000,5000, 5000, 8000, 10000, 15000]

월지출리스트만들기

그리고 2번째주 수요일의 지출금액을 알아보자. 2번째주 수요일이니까 10번째 원소번호 11번이다. 이렇게 몇 번째에 있는지 계산하고 찾아야한다.

한 리스트내에 너무 많은 원소가 들어가 있을 때는 데이터를 찾기가 힘들어진다. 그럼 조금 더 간단하게 사용할 수 있는 방법을 사용해보자.

일주일 단위로 리스트를 만들어 리스트에 넣게되면 지출을 검색하기 수월해진다.

month_money = [[5000,5000,8000,10000,15000,5000,5000],[5000,5000,8000,10000,15000,5000,5000],[5000,5000,8000,10000,15000,5000,5000],[5000,5000,8000,10000,15000,5000,5000]]

월지출리스트내리스트만들기

2째주 수요일을 지출금액을 찾아보자. 2째주 이니 2번째 리스트 안에 3번째 원소를 검색하면 된다.

month_money[1][2]

리스트내리스트인덱싱

- 그래프 출력

리스트의 또 다른 장점 중 하나는 그래프로 출력이 가능하다는 것이다. 별도의 변수에 담아서는 그래프를 출력할 수 없다.

일주일 간의 지출내역을 그래프로 출력해보자.

## 그래프를 출력하기 위해서 matplotlib 모듈이 필요하다.
# jupyter notebook에서 모듈 설치하는 방법 (아나콘다 사용시)
import sys
!conda install --yes --prefix {sys.prefix} matplotlib

# matplotlib모듈 불러오기
import matplotlib.pyplot as plt

# 일주일간 지출내역 리스트에 담기
money = [5000, 5000, 8000, 10000, 15000,8000,7000]

# 요일명 리스트에 담기
x = [1,2,3,4,5,6,7]

# 그래프의 x축,y축 지정하기
plt.bar(x,money)

# 그래프 그리기
plt.show()

리스트로그래프표현

3. 딕셔너리(Dictionary) 자료형

여러개의 데이터를 다루는 자료형 중 다른 하나는 딕셔너리 자료형이다. 리스트보다 검색에 최적화된 자료형이다.

- 딕셔너리 특징 및 주의 사항

딕셔너리는 사전처럼 키(key):값(value)로 저장된다.

  • 키 값으로 검색이 가능하다.
  • 한 딕셔너리 안에서 중복된키를 사용할 수 없다.
  • key는 숫자와 문자열, value는 숫자, 문자열, 리스트가 될 수 있다.
  • 딕셔너리를 정의할 때, 원소들의 묶음은 중괄호{} 로 감싸줘야한다.
  • 딕셔너리를 검색할 때는 대괄호[]를 사용한다.

- 딕셔너리 정의 방법

변수명 = {key1:val1, key2:val2, keyn:valn}

- 딕셔너리 자료형 예시

  1. 쌍으로 이루어진 데이터
    food ={'닭갈비':'춘천' , '한우':'횡성', '밀면':'부산'}
    

    딕셔너리생성하기

  2. 다양한 속성을 가지는 하나의 객체
    user1 = {'이름':'파이썬','나이':'20','주민번호':'1233-20202'}
    

- 딕셔너리 검색하기

주의할 점

  1. 정의를 할때는 중괄호를 사용 {}
  2. 검색할때는 대괄호를 사용 []
food['비빔밥']

딕셔너리 검색하기

- 딕셔너리 데이터 추가하기

주의할 점

  • key가 중복되지 않도록 유의
  • 중복되면 해당key의 값이 덮어써지게 됨
#변수명[key] =value
food['부대찌개']='의정부'

#딕셔너리 확인
food

딕셔너리 추가하기

- 딕셔너리 데이터 제거

#del 변수명[제거하려는 데이터쌍의 key]
del food['한우']

#딕셔너리 확인
food

딕셔너리 삭제하기

- 딕셔너리 내 딕셔너리

리스트와 마찬가지로 딕셔너리 내에도 딕셔너리를 사용할 수 있다. 딕셔너리 내 딕셔너리는 다양하게 활용될 수 있지만, 다양한 속성을 가진 데이터를 다룰 때 많이 사용한다.

사람의 속성에 대해 나열된 딕셔너리를 예를 들어보자. 사람의 속성을 성별, 직업라고 했을 때 여러사람의 딕셔너리를 만들어보자.

#사람 사전을 만들어보자
person = {'김연아':{'성별':'여','직업':'무직'},
          '유시민':{'성별':'남','직업':'작가'}}
# 김연아 검색  
person["김연아"]

# 김연아 직업검색
person["김연아"]["직업"]

딕셔너리내 딕셔너리

4. 정리

이번 장에서는 여러개의 데이터를 다루는 자료형에 대해 알아 보았다. 리스트와 딕셔너리 모두 여러 데이터를 하나의 변수에 담을 수 있는 자료형이다.
내가 생각하기에 리스트와 딕셔너리의 가장 큰 차이는 사용목적이 분명이 다르다. 리스트는 여러 유형의 데이터를 처리하기 위한 목적이 강하다면, 딕셔너리는 검색을 위한 목적이 강하다.
또한 두 개의 자료형 모두 응용할 수 있는 방법이 매우 다양하다. 사용목적에 따라 효율적으로 사용할 수 있다면 프로그래밍이 훨씬 수월해질 수 있을 것 같다.

이제까지 파이썬을 사용하기 위한 기본적 도구(?)들의 성격을 알아보았다. 다음 장에서는 본격적으로 파이썬 프로그래밍 방법들을 알아보도록 하자.