2. 범위 자르기 슬라이싱 (Slicing)

하나의 원소만 끄집어내는 정수 인덱싱([0])과 달리, 슬라이싱(Slicing)은 시퀀스 자료형(리스트, 문자열 등)의 특정 범위 전체를 한 번에 복사해서 떼어내는 기술입니다.

파이썬의 슬라이싱은 단순히 조회를 넘어서, 리스트의 특정 구간의 값들을 일괄적으로 다른 배열로 치환해버리는 매우 강력한 갱신 메커니즘을 제공합니다.

2.1 슬라이싱의 기본 문법 [시작:끝:간격]

대괄호 안에 콜론(:)을 넣어 구역을 지정합니다. 명시한 ‘시작 인덱스’부터 ‘끝 인덱스 - 1’까지 처리되는 점에 유의해야 합니다. (끝 인덱스 자체는 포함되지 않음)

  • [:] (전체 복사): 시작과 끝을 생략하면 배열의 처음부터 끝까지 새로운 복사본을 만들어 반환합니다. (copy() 와 동일한 효과)
  • [start:end]: start 이상, end 미만의 구간을 자릅니다.
  • [start:end:step]: step(간격)을 지정하여 한 칸씩 건너뛰거나, 역방향으로 자를 수 있습니다.
letters = ['A', 'B', 'C', 'D', 'E', 'F']

# 1. 1번부터 3번(4 미만)까지 자르기
print(letters[1:4]) # ['B', 'C', 'D']

# 2. 처음(0)부터 2번(3 미만)까지 자르기
print(letters[:3])  # ['A', 'B', 'C']

# 3. 2칸씩 건너뛰며 추출하기
print(letters[::2]) # ['A', 'C', 'E']

2.2 슬라이싱을 이용한 마법 같은 역방향 뒤집기

step(간격) 값에 음수 -1을 주면, 파이썬 인터프리터는 똑똑하게도 배열의 맨 끝에서부터 역방향으로 데이터를 긁어와 순서가 완벽히 뒤집힌 새로운 배열(또는 문자열)을 만들어줍니다.

text = "역방향으로 슬라이스 처리"

# 문자열 전체를 완전히 거꾸로 뒤집는 가장 파이썬다운 기법!
reversed_text = text[::-1] 

print(reversed_text) # "리처 스이라슬 로으향방역"

[!NOTE] 만약 음수를 사용해 수동으로 방향을 지정할 때는 시작점과 끝점의 논리에 주의해야 합니다. 끝 인덱스가 시작 인덱스보다 뒤에 위치해야 정방향으로 추출됩니다. (text[-7:-3] -> 정방향 추출 / text[-3:-7:-1] -> 역방향 추출)


2.3 슬라이스로 리스트 갱신 (치환 및 자동 확장)

슬라이싱 갱신은 파이썬 리스트 조작의 꽃입니다. 리스트의 특정 부분을 슬라이스로 도려낸 뒤 다른 배열을 할당하면, 새 배열의 크기가 더 크든 작든 알아서 공간을 늘리거나 줄여가며 완벽하게 꿰매어(Patch) 줍니다.

이를 통해 append, insert, delete 등을 복잡하게 섞어 쓸 필요 없이 배열을 통째로 성형할 수 있습니다.

buffer = [1, 2, 3, 4, 5]

# 원소 단 2개(3번, 4번 인덱스)의 공간을...
# 원소 5개짜리 배열로 덮어씌움!
buffer[3:] = [99, 98, 97, 96, 95]

print(buffer)
# [1, 2, 3, 99, 98, 97, 96, 95] (배열이 알아서 확장됨)

2.4 파이썬 내장 slice() 클래스 객체 활용

우리가 흔히 쓰는 my_list[0:5] 문법은 사실 파이썬 내부적으로 slice(0, 5)라는 클래스 객체를 생성해 전달하는 축약형(Syntax Sugar) 문법입니다.

만약 복잡하고 긴 문자열 로그나 텍스트 데이터 포맷이 일정하다면, 슬라이스 설계도를 변수에 미리 저장해두고 마치 ‘도장’처럼 찍어서 원하는 구역만 쉽게 뽑아낼 수 있습니다.

# 정형화된 문자열 데이터 (이름 3글자, 소속 4글자, 급여)
csv_data = "문성혁,아토규브,1000000"

# 미리 텍스트를 파싱할 구역(도장)을 만들어둡니다.
NAME_AREA = slice(0, 3)
COMPANY_AREA = slice(4, 8)

# 슬라이스 객체를 전달해 필요한 데이터만 파싱!
print(csv_data[NAME_AREA])    # "문성혁"
print(csv_data[COMPANY_AREA]) # "아토규브"
서브목차