
1. 기본 구조
형식: seq[start:stop:step]
- start: 시작 인덱스 (포함)
- stop: 종료 인덱스 (제외, 이 인덱스 직전까지 포함)
- step: 이동 간격 (기본값 = 1)
위 세 매개변수는 모두 선택적이며, 생략 시 기본값이 적용된다.
2. 기본 동작
슬라이싱은 start에서 시작해 stop 직전까지 step 간격으로 요소를 추출한다.
인덱스는 0부터 시작하며, 음수 인덱스도 사용 가능하다.
예시: text = "Python"
- 인덱스: P(0) y(1) t(2) h(3) o(4) n(5)
- 음수 인덱스: P(-6) y(-5) t(-4) h(-3) o(-2) n(-1)
3. 매개변수별 규칙과 기본값
(1) start : 슬라이싱이 시작할 위치.
기본값:
- step이 양수(기본값 1)일 때: 0 (문자열의 처음).
- step이 음수일 때: 마지막 인덱스 (len(text) - 1).
특징:
- 생략 가능.
- 범위를 벗어나도 에러 없이 동작 (빈 문자열 반환 가능).
(2) stop : 슬라이싱이 끝날 위치 (이 인덱스 직전까지 포함).
기본값:
- step이 양수일 때: 시퀀스의 길이 (len(text)).
- step이 음수일 때: -1 또는 '사실상' 0 바로 직전 - 인덱스0을 마지막으로 포함하고 멈추기 때문.
특징:
- 생략 가능.
- stop이 start보다 작아도 step 방향(양수인지 음수인지)에 따라 결과가 달라짐. (예를 들어 step이 양수인 text[3:1:1] 의 경우, 1이 3보다 작기 때문에 stop까지 도달할 수 없으므로 결과값은 빈 시퀀스 " "가 됨.
(3) step : 요소를 건너뛰는 간격.
기본값: 1 (한 칸씩 이동).
특징:
- 양수: 순방향 (왼쪽 → 오른쪽).
- 음수: 역방향 (오른쪽 → 왼쪽).
- 0은 불가능 (에러 발생).
4. 기본값 조합에 따른 동작
<예시>
text = "Python"
(1) text[start:stop] (step 생략, 기본값 1)
start 기본값: 0
stop 기본값: len(text) (6)
예:
text[:] → "Python" (0부터 끝까지).
text[2:] → "thon" (2부터 끝까지).
text[:3] → "Pyt" (0부터 3 직전까지).
(2) text[start:stop:step] (step 명시)
step이 양수:
text[1:5:2] → "yh" (1부터 5 직전까지 두 칸씩: y(1) → h(3)).
step이 음수:
text[5:1:-1] → "noht" (5부터 2까지 역방향: n(5) → o(4) → h(3) → t(2)).
(3) text[::step] (start, stop 생략)
step에 따라 기본값 변경:
step = 1: text[0:6:1] → "Python".
step = 2: text[0:6:2] → "Pto" (0, 2, 4).
step = -1: text[5:-1:-1] → "nohtyP" (5부터 0까지).
step = -2: text[5:-1:-2] → "nhy" (5, 3, 1).
5. 동작 예외와 특이점
범위 초과:
start나 stop이 시퀀스 길이를 벗어나도 에러 없이 동작.
예: text[10:] → " " (빈 문자열).
step 방향이 맞지 않는 경우:
start에서 stop으로 step 방향이 맞지 않으면 빈 문자열.
예: text[1:3:-1] → " " (1에서 3으로 역방향 불가).
음수 인덱스:
text[-3:] → "hon" (-3부터 끝까지).
text[:-2] → "Pyth" (0부터 -2 직전까지).
6. 다양한 슬라이싱 예시
text = "python"
text[1:4] → "yth" (1부터 4 직전).
text[ : :2] → "Pto" (0부터 끝까지 두 칸씩).
text[ : :-1] → "nohtyP" (끝에서 처음까지 역방향).
text[2: :-1] → "tyP" (2부터 처음까지 역방향).
text[-2:1:-2] → "ot" (-2부터 2까지 두 칸씩 역방향).
7. 문자열, 튜플, 리스트에서 공통 적용
파이썬에서 슬라이싱 seq[start:stop:step]의 규칙은 문자열(str), 튜플(tuple), 리스트(list)에 모두 동일하게 적용된다. 이 세 가지는 모두 시퀀스(sequence) 타입으로 분류되며, 슬라이싱 동작이 일관되게 설계되어 있다.
다만, 각 타입의 특성(가변성 여부 등)에 따라 결과물의 타입이나 사용 방법이 약간 다를 수 있는데, 이 부분에 대해서는 별도의 글에서 설명하기로 한다.
<예시>
text = "Python" # 문자열
tup = (1, 2, 3, 4) # 튜플
lst = [10, 20, 30, 40] # 리스트
print(text[1:4]) # "yth"
print(tup[1:4]) # (2, 3, 4)
print(lst[1:4]) # [20, 30, 40]
print(text[::-1]) # "nohtyP"
print(tup[::-1]) # (4, 3, 2, 1)
print(lst[::-1]) # [40, 30, 20, 10]
print(text[::2]) # "Pto"
print(tup[::2]) # (1, 3)
print(lst[::2]) # [10, 30]
8. 요약
step이 양수: 왼쪽에서 오른쪽으로, start 기본값 0, stop 기본값 끝.
step이 음수: 오른쪽에서 왼쪽으로, start 기본값 마지막 인덱스, stop 기본값 처음 직전.
'Journey to CS > 프로그래밍 언어' 카테고리의 다른 글
| [파이썬] 중첩 선택 구조 (feat. 놀이공원) (0) | 2025.03.13 |
|---|---|
| [파이썬] 다형성(Polymorphism) Part 1. 개념 이해하기 (feat. 우주청소로봇) (0) | 2025.03.07 |
| [파이썬] 딕셔너리 - 딕셔너리 내용을 삭제하는 메서드 (0) | 2025.02.21 |
| [파이썬] 리스트 - 리스트 내용을 삭제하는 메서드 .remove(), .pop(), clear() 비교 (0) | 2025.02.21 |
| [파이썬] 정규 표현식(Regex) 2. 그룹화(Grouping) (예제: 전화번호 찾기) (0) | 2025.02.20 |