하리Hari

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. 아래 코드를 실행하기 전에 마지막 줄에 무엇이 나올지 예상해 보세요.

'가방'을 ["책", "필통"]으로 정하자
'내가방'을 '가방'으로 정하자
'내가방' 뒤에서 꺼내자
'가방'을 출력하자
정답 보기

[책]이 나와요. '내가방'과 '가방'은 같은 목록을 가리키므로, '내가방'에서 꺼내면 '가방'에서도 빠져요.

다음 장에서는 같은 일을 여러 번 하는 반복문을 배워요. 묶음 안의 값을 하나씩 모두 살펴보는 것도 반복문으로 해요.

놀이터
결과
코드를 작성하고 '실행' 버튼을 눌러보세요.