Journey to CS/프로그래밍 언어

[파이썬] 슬라이싱 기본 규칙 - 문자열, 튜플, 리스트

Cordilog 2025. 3. 5. 14:40

 

파이썬의 슬라이싱 seq[start:stop:step]은 문자열, 리스트, 튜플 등 시퀀스 타입에서 특정 범위를 추출하는 도구로 다음과 같은 규칙을 갖는다. 

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 기본값 처음 직전.