7. 묶음 데이터 (목록, 사전)
값 여러 개를 하나로 묶어 다뤄요.
이 장에서 배울 것
- 값을 순서대로 묶는 목록 만들기, 꺼내기, 바꾸기
- 목록 앞뒤에 넣고 빼기
- 이름으로 값을 찾는 사전
- 묶음에 타입 붙이기, 같은 묶음을 함께 쓰는 이름표
학생 30명의 점수를 '점수1', '점수2', … 30개의 이름표로 만들 수는 없겠죠? 값이 여러 개일 때는 묶음에 담아요. 하리의 묶음은 두 가지예요.
| 묶음 | 모양 | 값을 찾는 방법 | 예 |
|---|---|---|---|
| 목록 | [ ] |
몇 번째인지 | 과일 목록, 점수 목록 |
| 사전 | { } |
이름(키) 으로 | 한 학생의 국어·수학 점수 |
목록 만들기
대괄호 안에 값을 쉼표로 나열해요.
'과일'을 ["사과", "포도", "바나나"]로 정하자
'과일'을 출력하자
('과일'의 '길이')를 출력하자
[사과, 포도, 바나나]와 3이 나와요. '길이'로 몇 개가 들어 있는지 알 수 있어요. 아무것도 없는 빈 목록은 []예요.
몇 번째 값 꺼내기
문자열처럼 1번째부터 세요.
'과일'을 ["사과", "포도", "바나나"]로 정하자
('과일'의 1번째)를 출력하자
('과일'의 3번째)를 출력하자
'순서'를 2로 정하자
('과일'의 '순서'번째)를 출력하자
('과일'의 ('순서' + 1)번째)를 출력하자
사과, 바나나, 포도, 바나나가 나와요. 번째에는 숫자뿐 아니라 이름표나 계산식도 쓸 수 있어요. 계산식은 괄호로 감싸세요.
값 바꾸기
'목록'의 N번째를 값으로 정하자로 그 자리의 값을 바꿔요.
'과일'을 ["사과", "포도", "바나나"]로 정하자
'과일'의 2번째를 "딸기"로 정하자
'과일'을 출력하자
[사과, 딸기, 바나나]가 나와요. (문자열은 글자를 바꿀 수 없었지만, 목록은 바꿀 수 있어요.)
넣고 빼기
| 쓰는 법 | 하는 일 |
|---|---|
'목록'에 값을 추가하자 |
맨 뒤에 넣어요 |
'목록' 앞에 값을 추가하자 |
맨 앞에 넣어요 |
'목록' 뒤에서 꺼내자 |
맨 뒤 값을 빼요 |
'목록' 앞에서 꺼내자 |
맨 앞 값을 빼요 |
'x'를 '목록' 뒤에서 꺼낸 값으로 정하자 |
빼면서 그 값을 'x'에 담아요 |
'줄'을 ["철수", "영희"]로 정하자
'줄'에 "민수"를 추가하자
'줄' 앞에 "하리"를 추가하자
'줄'을 출력하자
'첫손님'을 '줄' 앞에서 꺼낸 값으로 정하자
틀"{'첫손님'}님 들어오세요!"를 출력하자
'줄'을 출력하자
[하리, 철수, 영희, 민수], 하리님 들어오세요!, [철수, 영희, 민수]가 나와요. 줄 서기처럼 뒤에 넣고 앞에서 빼면 먼저 온 사람이 먼저 나가요.
목록을 통째로 비우려면 <비우기>()를 써요.
'할일'을 ["청소", "빨래"]로 정하자
'할일'의 <비우기>()를 실행하자
('할일'의 '길이')를 출력하자
사전: 이름으로 찾기
사전은 이름(키)과 값의 짝을 묶어요. 중괄호 안에 키: 값을 쉼표로 나열해요.
'점수'를 {"국어": 90, "수학": 80}으로 정하자
('점수'의 "국어")를 출력하자
90이 나와요. 목록이 “몇 번째”로 찾는다면, 사전은 “무슨 이름”으로 찾아요.
사전에 넣기와 바꾸기
없는 키에 값을 정하면 새로 생기고, 있는 키에 정하면 바뀌어요.
'점수'를 {"국어": 90, "수학": 80}으로 정하자
'점수'의 "영어"를 70으로 정하자
'점수'의 "수학"에 10을 더하자
'점수'를 출력하자
{국어: 90, 수학: 90, 영어: 70}이 나와요.
키가 있는지 확인하기
없는 키를 꺼내면 오류가 나요. 확실하지 않으면 <포함확인>(키)로 먼저 확인하세요. 키가 있으면 참, 없으면 거짓이에요.
'점수'를 {"국어": 90}으로 정하자
만약 ('점수'의 <포함확인>("과학")) 라면:
('점수'의 "과학")를 출력하자
그렇지 않다면:
"과학 점수는 아직 없어요."를 출력하자
묶음 안의 묶음
목록 안에 목록이나 사전을, 사전 안에 목록을 넣을 수 있어요. 바깥부터 차례로 꺼내면 돼요.
'학생'을 {"이름": "하리", "취미": ["독서", "코딩"]}으로 정하자
(('학생'의 "취미")의 2번째)를 출력하자
'반'을 [{"이름": "하나", "점수": 90}, {"이름": "두리", "점수": 85}]로 정하자
(('반'의 2번째)의 "이름")을 출력하자
코딩과 두리가 나와요. 이런 묶음을 하나씩 모두 살펴보는 법은 다음 장(반복문)에서 배워요.
묶음에 타입 붙이기 (선택)
1장의 타입처럼, 묶음에도 무엇을 담을지 정해 둘 수 있어요.
| 타입 | 뜻 |
|---|---|
[목록] |
무엇이든 담는 목록 |
[(문자열)목록] |
글자만 담는 목록 |
[(숫자)목록] |
숫자만 담는 목록 |
[사전] |
무엇이든 담는 사전 |
[(문자열, 숫자)사전] |
키는 글자, 값은 숫자인 사전 |
'점수들'을 [(숫자)목록]인 [90, 85]로 정하자
'점수들'에 77을 추가하자
'점수들'을 출력하자
숫자 목록에 글자를 넣으려고 하면 오류가 나서 실수를 빨리 찾을 수 있어요.
'점수들'을 [(숫자)목록]인 [90, 85]로 정하자
'점수들'에 "백점"을 추가하자
같은 묶음을 함께 쓰는 이름표
목록과 사전은 다른 이름표에 담아도 복사되지 않고 같은 묶음을 함께 가리켜요. 한쪽에서 바꾸면 다른 쪽에서도 바뀌어 보여요.
'원래'를 [1, 2]로 정하자
'다른이름'을 '원래'로 정하자
'다른이름'에 3을 추가하자
'원래'를 출력하자
'원래'에도 3이 들어간 [1, 2, 3]이 나와요. 묶음 하나에 이름표 두 개를 붙인 것과 같아요. 숫자나 문자열은 이렇게 함께 바뀌는 일이 없어요.
자주 하는 실수
1. 없는 번째나 없는 키를 꺼내기
'과일'을 ["사과", "포도"]로 정하자
('과일'의 3번째)를 출력하자
“목록의 길이를 벗어난 위치(인덱스)예요.” 가 나와요. 목록은 '길이'보다 큰 번째가 없고, 사전은 <포함확인>으로 먼저 확인하세요. 빈 목록에서 꺼내도 오류(“목록이 비어 있어요.”)가 나요.
2. 0번째부터 세기
목록도 1번째부터 세요.
3. 함께 바뀌는 걸 모르고 쓰기
목록을 다른 이름표에 담고 그 이름표를 고치면 원래 목록도 바뀌어요(위 예). 의도한 게 아니라면 같은 목록을 두 이름으로 쓰지 마세요.
정리
| 하고 싶은 일 | 목록 | 사전 |
|---|---|---|
| 만들기 | ["가", "나"] |
{"키": 값} |
| 꺼내기 | '목록'의 1번째 |
'사전'의 "키" |
| 바꾸기 | '목록'의 1번째를 값으로 정하자 |
'사전'의 "키"를 값으로 정하자 |
| 넣기 | '목록'에 값을 추가하자 (앞에: 앞에) |
'사전'의 "새키"를 값으로 정하자 |
| 빼기 | '목록' 뒤에서 꺼내자 / 앞에서 꺼내자 |
— |
| 개수 | '목록'의 '길이' |
— |
| 있는지 | — | '사전'의 <포함확인>("키") |
| 비우기 | '목록'의 <비우기>() |
— |
연습 문제
1. 좋아하는 음식 세 개를 목록에 담고, 두 번째 음식을 출력한 뒤, 맨 뒤에 음식 하나를 더 넣어 목록 전체를 출력해 보세요.
정답 예시
'음식'을 ["김밥", "라면", "떡볶이"]로 정하자
('음식'의 2번째)를 출력하자
'음식'에 "순대"를 추가하자
'음식'을 출력하자
2. 친구의 이름과 나이를 사전에 담고, 틀로 “하리는 20살이에요.“처럼 출력해 보세요.
정답 예시
'친구'를 {"이름": "하리", "나이": 20}으로 정하자
틀"{'친구'의 "이름"}는 {'친구'의 "나이"}살이에요."를 출력하자
3. 아래 코드를 실행하기 전에 마지막 줄에 무엇이 나올지 예상해 보세요.
'가방'을 ["책", "필통"]으로 정하자
'내가방'을 '가방'으로 정하자
'내가방' 뒤에서 꺼내자
'가방'을 출력하자
정답 보기
[책]이 나와요. '내가방'과 '가방'은 같은 목록을 가리키므로, '내가방'에서 꺼내면 '가방'에서도 빠져요.
다음 장에서는 같은 일을 여러 번 하는 반복문을 배워요. 묶음 안의 값을 하나씩 모두 살펴보는 것도 반복문으로 해요.