
3. 확장형 데이터 다루기
【파이선 배우기】
1. 리스트
2. 튜플
3. 딕셔너리
지난 단원에서 변수를 그릇에 비유했다. 변수가 그릇이라면 리스트는 그릇을 모아놓은 그릇 상자라고 할 수 있다. 리스트는 하나씩 사용하던 그릇을 한 줄로 넣어 놓은 상자와 같은 개념이다.

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

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

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

aa=[1, 2, 3, 4, 5]
bb=['도윤', '수빈', '여준']
cc=[10, 20.3, 'abc']
print(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(위치, 값)’함수를 사용해서 리스트에 값을 추가하는 예제 코드이다.

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
[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(위치, 값)’ 함수는 지정한 위치에 값을 추가하는 함수라는 것을 확인할 수 있다.
나. 리스트 값 사용하기
리스트의 항목에 접근하려면 ‘리스트 이름[위치]’를 사용한다. 다음은 ‘리스트 이름[위치]를 사용해서 리스트의 항목에 접근하는 예제 코드이다.

aa=[1, 2, 3, 4, 5]
print(aa[0])
print(aa[0]+aa[2])

>3list3.py
1
4
‘리스트 이름[위치]’는 리스트의 해당 위치에 있는 값에 접근하는 함수이다. print(aa[0]) 명령은 aa[0]번째 값인 1이 출력되며, print(aa[0]+aa[2]) 명령은 리스트의 aa[0] 값과 aa[2]의 값인 1과 3의 합인 4가 출력된다.
다. 여러 개의 리스트 값 사용하기
리스트에 접근할 때 콜론(:)을 사용해서 범위를 지정할 수 있다. ‘리스트 이름[시작:끝+1]’로 지정하면 리스트의 모든 값이 나온다. 콜론 뒤에 오는 수에 해당하는 리스트 값은 포함되지 않는 점에 주의해야 한다.

aa=[1, 2, 3, 4, 5]
print(aa[0:5])

>3list4.py
[1, 2, 3, 4, 5]
리스트 aa가 [1, 2, 3, 4, 5]로 생성되어 있으므로 ‘print(aa[0:5])’는 리스트 aa[0]의 값부터 aa[4]의 값까지이므로 리스트 aa 전체가 출력된다.
라. 리스트 값 변경하기
리스트 값을 변경하는 방법은 다양하다. 다음은 다양한 방법으로 리스트의 값을 변경하는 예제 코드이다.

aa=[1, 2, 3, 4, 5]
aa[1]=3
aa[2:4]=[2, 3]
del(aa[0])
print(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)은 리스트와 비슷하게 사용된다. 리스트는 대괄호([ ])로 생성하고 튜플은 괄호(( ))로 생성한다. 튜플은 값을 수정할 수 없으며, 읽기만 가능하므로 자료를 수정할 필요가 없을 경우 사용한다.
가. 튜플의 생성

aa=(1, 2, 3)
print(aa)

>3tuple1.py
(1, 2, 3)
튜플은 괄호()를 이용해서 생성한다. 괄호 안에 리스트와 같은 방식으로 값을 입력할 수 있다. 튜플 aa에 1, 2, 3의 값을 입력하였으므로 튜플 aa의 값을 출력하면 (1, 2, 3)이 출력된다.
나. 튜플 값 사용하기
튜플의 항목에 접근하려면 리스트와 마찬가지로 ‘튜플 이름[위치]’를 사용한다.

aa=(1, 2, 3, 4, 5)
print(aa[0])
print(aa[0]+aa[2])
print(aa[1:3])

>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:자동차’처럼 의미 있는 두 값을 연결하여 구성하는 것을 말한다. 딕셔너리는 중괄호({ })로 묶여 있으며 다음과 같이 키와 값의 쌍으로 이루어져 있다.
가. 딕셔너리의 생성

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

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

aa={'성별':'남', '번호':15, '이름':'홍길동'}
print(aa['성별'])
print(aa['번호'])

>3dic2.py
남
15
주어진 예제 코드에서 딕셔너리 aa의 값은 성별:남, 번호:15, 이름:홍길동으로 짝을 이루고 있다. aa[‘성별’]를 출력하면 성별의 짝인 남이 출력되고 aa[‘번호’]를 출력하면 번호의 짝인 15가 출력된다.
다. 딕셔너리 값 변경하기
딕셔너리의 값은 추가할 수 있고, 변경 또는 삭제할 수도 있다. 다음은 딕셔너리 값을 다양하게 변경하는 예제 코드이다.

aa={'성별':'남', '번호':15, '이름':'홍길동'}
aa['연락처']='010-1234-5678'
aa['성별']='여'
del(aa['이름'])
print(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['성별']='남자'