3. 확장형 데이터 다루기

【파이선 배우기】


1. 리스트

2. 튜플

3. 딕셔너리

지난 단원에서 변수를 그릇에 비유했다. 변수가 그릇이라면 리스트는 그릇을 모아놓은 그릇 상자라고 할 수 있다. 리스트는 하나씩 사용하던 그릇을 한 줄로 넣어 놓은 상자와 같은 개념이다.

이미지. 변수를 표현한 그림. 각종 데이터들이 그릇에 있는 모습이 그려져 있다.

리스트라는 상자에는 그릇을 새로 집어넣거나 안의 그릇들을 상자 밖으로 뺄 수 있다. 튜플은 리스트와 같이 그릇을 한 줄로 넣어 놓은 상자라는 점은 같지만 그릇을 새로 집어넣거나 한 번 넣은 그릇을 뺄 수 없다는 것이 다르다.

이미지. 리스트 구조를 표현한 그림. 상자에 그릇들이 들어있고 그릇을 집어넣는 모습이 그려져 있다.

딕셔너리는 말 그대로 사전의 ‘art:예술’과 같이 의미 있는 두 값의 쌍으로 이루어진 구조를 말한다.

이미지. 딕셔너리 구조를 표현한 그림. 사전에 과일의 그림과 이름이 그려져 있다.

1리스트

리스트(List)는 하나씩 사용하던 변수를 한 줄로 붙여놓은 것과 같은 개념이다. 변수의 이름은 a, b, c, d 식으로 지정했지만, 리스트는 변수를 한 줄로 붙인 뒤에 박스 전체의 이름(aa)을 지정한다. 그리고 각각은 aa[0], aa[1], aa[2], aa[3]과 같이 번호를 붙여서 사용한다. 100개가 넘는 변수를 선언한다고 할 경우 알파벳으로는 부족하기도 하고, 코딩하는데도 많은 시간이 소요된다. 이럴 때 리스트를 사용하면 편리하다.

가. 리스트의 생성과 추가

리스트는 대괄호([ ]) 안에 값들을 선언하면 된다. 리스트를 생성한 다양한 예이다. cc와 같이 다양한 형식을 섞어서 리스트를 만들 수도 있다.

이미지. 리스트의 생성과 추가를 설명한 동영상의 스크린샷.
예제 코드, 3list1.py

aa=[1, 2, 3, 4, 5]

bb=['도윤', '수빈', '여준']

cc=[10, 20.3, 'abc']


print(aa, bb, cc)

이미지. 3list1.py의 순서도. 시작, 다음, 리스트 aa, bb, cc를 대입, 다음, 리스트 aa, bb, cc를 출력, 다음 출력
실행결과

>3list1.py

[1, 2, 3, 4, 5] ['도윤', '수빈', '여준'] [10, 20.3, 'abc']

리스트는 정수, 문자열, 실수 등 서로 다른 데이터 형식을 하나로 묶을 수 있다. 리스트 aa에는 정수 [1, 2, 3, 4, 5]가, 리스트 bb에는 문자열 [‘도윤’, ‘수빈’, ‘여준’]이, 리스트 cc에는 정수, 실수, 문자열이 혼합된 [10, 20.3, ‘abc’]가 대입되어 있다. 다음은 ‘리스트 이름.append(값)’ 함수와 ‘리스트 이름.insert(위치, 값)’함수를 사용해서 리스트에 값을 추가하는 예제 코드이다.

이미지. 리스트의 생성과 추가를 설명한 동영상의 스크린샷.
예제 코드, 3list2.py

aa=[1, 2, 3, 4, 5]

bb=[1, 2, 3, 4, 5]

aa.append(6)

bb.insert(2, 10)


print(aa)

print(bb)

이미지. 3list2.py의 순서도. 시작, 다음, 리스트 aa, bb를 대입, 리스트 aa, bb에 변수 추가, 다음, 리스트 aa, bb 출력, 다음, 종료
실행결과

>3list2.py

[1, 2, 3, 4, 5, 6]

[1, 2, 10, 3, 4, 5]

리스트 aa와 리스트 bb는 모두 [1, 2, 3, 4, 5]로 생성되어 있다. ‘aa.append(6)’를 사용하면 리스트 aa의 값이 [1, 2, 3, 4, 5, 6]로 추가된 것을 확인할 수 있다. 이와 같이 ‘리스트 이름.append(값)’ 함수는 리스트 제일 뒤에 항목을 추가하는 함수이다. bb.insert(2, 10)를 사용하면 리스트 bb의 값이 [1, 2, 10, 3, 4, 5]로 지정한 리스트 bb[2] 값에 10이 추가된 것을 확인할 수 있다. 이와 같이 ‘리스트 이름.insert(위치, 값)’ 함수는 지정한 위치에 값을 추가하는 함수라는 것을 확인할 수 있다.

나. 리스트 값 사용하기

리스트의 항목에 접근하려면 ‘리스트 이름[위치]’를 사용한다. 다음은 ‘리스트 이름[위치]를 사용해서 리스트의 항목에 접근하는 예제 코드이다.

이미지. 리스트 값 사용법을 설명한 동영상의 스크린샷.
예제 코드, 3list3.py

aa=[1, 2, 3, 4, 5]


print(aa[0])

print(aa[0]+aa[2])

이미지. 3list3.py의 순서도. 시작, 다음, 리스트 aa를 대입, 다음, 리스트 aa의 0번째 값 출력, 리스트 aa의 0번째와 2번째 값의 합을 출력, 다음, 종료
실행결과

>3list3.py

1

4

‘리스트 이름[위치]’는 리스트의 해당 위치에 있는 값에 접근하는 함수이다. print(aa[0]) 명령은 aa[0]번째 값인 1이 출력되며, print(aa[0]+aa[2]) 명령은 리스트의 aa[0] 값과 aa[2]의 값인 1과 3의 합인 4가 출력된다.

다. 여러 개의 리스트 값 사용하기

리스트에 접근할 때 콜론(:)을 사용해서 범위를 지정할 수 있다. ‘리스트 이름[시작:끝+1]’로 지정하면 리스트의 모든 값이 나온다. 콜론 뒤에 오는 수에 해당하는 리스트 값은 포함되지 않는 점에 주의해야 한다.

이미지. 여러 개의 리스트 값 사용법을 설명한 동영상의 스크린샷.
예제 코드, 3list4.py

aa=[1, 2, 3, 4, 5]


print(aa[0:5])

이미지. 3리스트4점py의 순서도. 시작, 리스트 aa를 대입, 다음, 리스트 aa의 범위를 지정하여 출력, 다음, 종료
실행결과

>3list4.py

[1, 2, 3, 4, 5]

리스트 aa가 [1, 2, 3, 4, 5]로 생성되어 있으므로 ‘print(aa[0:5])’는 리스트 aa[0]의 값부터 aa[4]의 값까지이므로 리스트 aa 전체가 출력된다.

라. 리스트 값 변경하기

리스트 값을 변경하는 방법은 다양하다. 다음은 다양한 방법으로 리스트의 값을 변경하는 예제 코드이다.

이미지. 리스트 값을 변경하는 방법을 설명한 동영상의 스크린샷.
예제 코드, 3list5.py

aa=[1, 2, 3, 4, 5]

aa[1]=3

aa[2:4]=[2, 3]

del(aa[0])


print(aa)

이미지. 3list5.py의 순서도. 시작, 리스트 aa를 대입 및 수정, 다음, 리스트 aa를 출력, 다음, 종료
실행결과

>3list5.py

[3, 2, 3, 5]

리스트 aa가 [1, 2, 3, 4, 5]로 생성되어 있다. aa[1]=3을 실행하면 aa[1]의 값 2가 3으로 변경되어 [1, 3, 3, 4, 5]가 된다. 다음 행의 aa[2:4]=[2, 3]으로 aa[2] 번째 값부터 aa[3] 값까지가 2, 3으로 변경되어 [1, 3, 2, 3, 5]가 된다. 다음 행의 del(aa[0]) 함수로 aa[0]의 값인 1이 삭제되어 list aa는 [3, 2, 3, 5]가 된다.

마. 코딩해 보기

1) [1, 2, 3, 4, 5]로 리스트를 생성한 후 리스트의 값이 [1, 3, 5, 7, 9]로 변경되도록 코딩해 보자.

aa=[1, 2, 3, 4, 5]

aa[1:5]=[3, 5, 7, 9]

2) [1, 2, 3, 4, 5]로 리스트를 생성한 후 리스트의 값이 [1, 3, 5, 5]로 변경되도록 코딩해 보자.

bb=[1, 2, 3, 4, 5]

bb[3]=5

del(bb[1])

2튜플

튜플(Tuple)은 리스트와 비슷하게 사용된다. 리스트는 대괄호([ ])로 생성하고 튜플은 괄호(( ))로 생성한다. 튜플은 값을 수정할 수 없으며, 읽기만 가능하므로 자료를 수정할 필요가 없을 경우 사용한다.

가. 튜플의 생성

이미지. 튜플의 생성을 설명한 동영상의 스크린샷.
예제 코드, 3tuple1.py

aa=(1, 2, 3)


print(aa)

이미지. 3tuple1.py의 순서도. 시작, 다음, 튜플 aa를 대입, 다음, 튜플 aa를 출력, 다음, 종료
실행결과

>3tuple1.py

(1, 2, 3)

튜플은 괄호()를 이용해서 생성한다. 괄호 안에 리스트와 같은 방식으로 값을 입력할 수 있다. 튜플 aa에 1, 2, 3의 값을 입력하였으므로 튜플 aa의 값을 출력하면 (1, 2, 3)이 출력된다.

나. 튜플 값 사용하기

튜플의 항목에 접근하려면 리스트와 마찬가지로 ‘튜플 이름[위치]’를 사용한다.

이미지. 튜플 값 사용을 설명한 동영상의 스크린샷.
예제 코드, 3tuple2.py

aa=(1, 2, 3, 4, 5)


print(aa[0])

print(aa[0]+aa[2])

print(aa[1:3])

이미지. 3tuple2.py의 순서도. 시작, 다음, 튜플 aa를 대입, 다음, 튜플 aa의 일부 값과 합, 일부 구간을 출력, 다음, 종료
실행결과

>3tuple2.py

1

4

(2, 3)

튜플 aa가 (1, 2, 3, 4, 5)로 생성되었다. aa[0]은 튜플 aa의 가장 앞의 값을 의미하므로 출력하면 1이 출력된다. aa[0]+aa[2]의 값은 튜플 aa[0]의 값인 1과 aa[2]의 값인 3의 합을 말한다. 따라서 4가 출력된다. 마지막 행의 aa[1:3]은 튜플 aa[1]부터 aa[2]까지의 값을 의미하므로 출력하면 (2, 3)이 출력된다.

다. 사용할 수 없는 코드

튜플은 읽기 전용이므로 다음 코드는 모두 오류가 발생한다.

aa.append(10)

aa[0]=10

del(aa[0])

라. 코딩해 보기

1) (1, 2, 3, 4)로 튜플을 생성한 후 aa[0]의 값과 aa[1]의 값의 합이 출력되도록 코딩해 보자.

aa=(1, 2, 3, 4)

print(aa[0]+aa[1])

2) 튜플 bb를 (1, 2, 3, 4, 5)로 생성한 후 aa[1]의 값부터 aa[3]의 값까지 출력되도록 코딩해 보자.

bb=(1, 2, 3, 4, 5)

print(bb[1:4])

3딕셔너리

딕셔너리는 사전을 생각하면 된다. 두 개의 쌍이 하나로 묶이는 자료구조를 말하며 예를 들어 ‘car:자동차’처럼 의미 있는 두 값을 연결하여 구성하는 것을 말한다. 딕셔너리는 중괄호({ })로 묶여 있으며 다음과 같이 키와 값의 쌍으로 이루어져 있다.

딕셔너리 변수={키1:값1, 키2:값2, 키3:값3}

가. 딕셔너리의 생성

이미지. 딕셔너리의 생성을 설명한 동영상의 스크린샷.
예제 코드, 3dic1.py

aa={1:'a', 2:'b', 3:'c'}


print(aa)

이미지. 3dic1.py의 순서도. 시작, 다음, 딕셔너리 aa를 대입, 다음, 딕셔너리 aa를 출력, 다음, 종료.
실행결과

>3dic1.py

{1: 'a', 2: 'b', 3: 'c'}

딕셔너리는 중괄호{}안에 값을 입력하여 생성한다. 이때 키와 값을 콜론(:)으로 연결하여 하나의 쌍으로 묶이게 만들어줘야 한다. 주어진 예제 코드에서는 키 1과 값 ‘a’, 키 2와 값 ‘b’, 키 3과 값 ‘c’가 쌍을 이루어 딕셔너리가 생성되었다.

나. 딕셔너리 값 사용하기

딕셔너리의 항목에 접근하려면 ‘딕셔너리 이름[키]’을 사용한다.

이미지. 딕셔너리 값 사용을 설명한 동영상의 스크린샷.
예제 코드, 3dic2.py

aa={'성별':'남', '번호':15, '이름':'홍길동'}


print(aa['성별'])

print(aa['번호'])

이미지. 3dic2.py의 순서도. 시작, 다음, 딕셔너리 aa를 대입, 다음, 딕셔너리 aa의 일부를 출력, 다음, 종료
실행결과

>3dic2.py

15

주어진 예제 코드에서 딕셔너리 aa의 값은 성별:남, 번호:15, 이름:홍길동으로 짝을 이루고 있다. aa[‘성별’]를 출력하면 성별의 짝인 남이 출력되고 aa[‘번호’]를 출력하면 번호의 짝인 15가 출력된다.

다. 딕셔너리 값 변경하기

딕셔너리의 값은 추가할 수 있고, 변경 또는 삭제할 수도 있다. 다음은 딕셔너리 값을 다양하게 변경하는 예제 코드이다.

이미지. 딕셔너리 값 변경을 설명한 동영상의 스크린샷.
예제 코드, 3dic3.py

aa={'성별':'남', '번호':15, '이름':'홍길동'}

aa['연락처']='010-1234-5678'

aa['성별']='여'

del(aa['이름'])


print(aa)

이미지. 3dic3.py의 순서도. 시작, 딕셔너리 aa를 대입 및 추가, 수정, 삭제, 다음 딕셔너리 aa를 출력, 다음 종료
실행결과

>3dic3.py

{'성별': '여', '번호': 15, '연락처': '010-1234-5678'}

딕셔너리에 쌍을 추가하려면 ‘딕셔너리 이름[키]=값’형식을 사용한다. 2행에서 ‘aa[‘연락처’]=‘010-1234-5678’’을 사용해 딕셔너리 aa에 ‘연락처’:‘010-1234-5678’를 추가했다. 3행에서는 ‘aa[‘성별’]=‘여’’ 코드를 사용했는데 성별은 이미 존재하는 키이므로 기존의 값이 ‘여’로 변경되었다. 4행에서는 ‘del(aa[‘이름’])’ 코드를 사용해 딕셔너리 aa의 ‘이름’:‘홍길동’ 쌍이 삭제되었다. 따라서 모든 코드를 실행한 후 aa를 출력하게 되면 딕셔너리 aa는 {‘성별’: ‘여’, ‘번호’: 15, ‘연락처’: ‘010-1234-5678’}로 출력된다.

라. 코딩해 보기

1) ‘학년:1, 반:2, 번호:27, 이름:파이선’의 값이 딕셔너리 aa로 생성될 수 있도록 코딩해 보자.

aa={'학년':1, '반':2, '번호':27, '이름':'파이선'}

2) 1번 실습 예제에서 만든 딕셔너리 aa 값 중에서 ‘학년’의 값은 2로 바꾸고, ‘성별’:‘남자’의 값이 추가되도록 코딩해 보자.

aa={'학년':1, '반':2, '번호':27, '이름':'파이선'}

aa['학년']=2

aa['성별']='남자'