시험공부빅데이터분석
← 보드왕초보 코드 읽기 · 4/11

리스트와 인덱스, 슬라이싱 ★★★ 시험 단골

리스트(list)는 값을 대괄호 [ ]로 묶어 줄 세운 거예요. 칸마다 번호가 있고, 번호는 0부터 시작해요. 이 번호를 인덱스(index)라고 해요.

비유

자(ruler)의 눈금은 1cm가 아니라 0cm에서 시작해요. 리스트의 첫 칸도 "1번"이 아니라 "0번"이에요. 0번이 있어서 마지막 칸 번호는 "개수 − 1"이에요.

리스트 a1020304050
앞에서 센 번호01234
뒤에서 센 번호-5-4-3-2-1

뒤에서부터 세고 싶으면 마이너스 번호를 써요. -1은 맨 마지막 칸이에요.

여러 칸을 한꺼번에 꺼내는 것이 슬라이싱(slicing)이에요. 모양은 a[시작:끝]이고, 끝 번호의 칸은 포함하지 않아요. "시작 칸부터 끝 번호 바로 앞 칸까지"예요.

a = [10, 20, 30, 40, 50] print(a[0]) print(a[-1]) print(a[1:3]) print(a[:2]) print(a[2:]) print(a[::2]) print(len(a)) a.append(60) print(a)
10 50 [20, 30] [10, 20] [30, 40, 50] [10, 30, 50] 5 [10, 20, 30, 40, 50, 60]
코드 줄무슨 뜻
a[0]0번 칸 → 10
a[-1]맨 마지막 칸 → 50
a[1:3]1번 칸부터 3번 앞까지 → 1번, 2번 칸 → [20, 30]. 개수는 3−1 = 2개
a[:2]시작을 비우면 "처음부터". 0번, 1번 칸 → [10, 20]
a[2:]끝을 비우면 "끝까지". 2번 칸부터 마지막까지
a[::2]맨 끝의 숫자는 간격(보폭)이에요. 2칸씩 건너뛰며 → 10, 30, 50
len(a)칸 개수 = 5. 마지막 번호(4)보다 1 커요
a.append(60)리스트 맨 뒤에 60을 덧붙여요. 점(.) 쓰는 법은 0-8에서 설명해요

왜 끝 번호를 포함하지 않을까요? 이렇게 하면 a[0:2]와 a[2:5]를 이어 붙였을 때 빠지거나 겹치는 칸이 없어서 깔끔하기 때문이에요. 이 규칙은 다음 장 Tensor 슬라이싱에서 그대로 쓰여요.

소괄호로 묶은 튜플(tuple)도 자주 나와요. 리스트와 거의 같은데 값을 바꿀 수 없어요. 특히 원소가 하나뿐인 튜플은 쉼표를 꼭 붙여서 (3,)이라고 써요. 그냥 (3)이면 괄호 친 숫자 3일 뿐이라서 구분하려고 쉼표를 붙여요. 시험 선택지의 (3,)은 "원소가 3개인 한 줄"이라는 뜻이에요(2장).

시험엔 이렇게 써요 — 이렇게 고르세요

슬라이싱 문제는 먼저 칸마다 0, 1, 2, …번호를 써 놓고 풀어요. [시작:끝]은 "시작 칸부터 끝 칸 바로 앞까지"이고 개수는 끝 − 시작이에요. 마이너스 번호는 뒤에서부터 세요.

잠깐 확인 — b = [5, 6, 7, 8, 9]일 때 b[1:4]와 b[-2:]는?

b[1:4]는 1, 2, 3번 칸이라서 [6, 7, 8]이에요. b[-2:]는 뒤에서 두 번째부터 끝까지라서 [8, 9]예요.

다음 카드 → 함수 — 이름 붙은 작은 기계 (def, return) ★★

자료: 2~4주차 · Week02/Week03 노트북(풀이포함) · 빅분02(2주차)·빅데이터03(3주차)·빅데이터04(4주차) 녹취