슬라이싱은 파이썬에서 리스트, 문자열, 튜플 등의 시퀀스 타입에 적용되는 강력한 기능입니다. 슬라이싱을 사용하면 시퀀스의 일부분을 선택적으로 접근할 수 있습니다. 기본 형식은 sequence[start:stop:step]이며, 여기서 start는 시작 인덱스, stop은 종료 인덱스(포함되지 않음), step은 건너뛰는 요소의 수를 지정합니다.
예제코드
# 리스트 슬라이싱
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sliced = numbers[2:7:2]
print(sliced) # 출력: [2, 4, 6]
# 문자열 슬라이싱
text = "Hello, world!"
sub_text = text[7:12]
print(sub_text) # 출력: world
파이썬에서 슬라이스의 stop 인덱스는 해당 범위에 포함되지 않습니다. 이는 여러 부분으로 나누어진 슬라이스들이 서로 중복되지 않고, 연속성을 유지하도록 설계되었기 때문입니다. 예를 들어, 0:5와 5:10처럼 연속적인 슬라이스를 만들 경우, 두 슬라이스는 서로 겹치지 않으며 분명한 경계를 가집니다. 이러한 접근 방식은 프로그래밍에서 일관성과 예측 가능성을 높이는 데 도움이 됩니다.
예제코드
print(a[0:5])
[1, 2, 3, 4, 5]
print(a[5:10])
[6, 7, 8, 9, 10]
슬라이스 객체는 slice(start, stop, step) 함수를 사용하여 명시적으로 생성할 수 있습니다. 이 객체는 슬라이싱 연산을 좀 더 명확하게 표현하고 재사용할 수 있게 해줍니다.
예제코드
# 슬라이스 객체 생성
my_slice = slice(2, 7, 2)
# 리스트에 슬라이스 객체 사용
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sliced = numbers[my_slice]
print(sliced) # 출력: [2, 4, 6]
다차원 데이터 구조에서 슬라이싱을 사용할 때는 각 차원에 대한 슬라이스를 지정할 수 있습니다. 이 때, 생략기호 (...)는 하나 이상의 차원을 나타내는 데 사용되며, 주로 고차원 배열에서 사용됩니다. 예를 들어, 넘파이(numpy)와 같은 라이브러리에서 행렬이나 다차원 배열을 다룰 때 유용합니다.
예제코드
import numpy as np
# 3차원 넘파이 배열
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
# 다차원 슬라이싱
sliced = arr[1, ..., 0]
print(sliced) # 출력: [5 7]
슬라이스에 값을 할당하는 것은 시퀀스의 일부분을 다른 내용으로 대체할 때 사용됩니다. 이 기능은 가변 시퀀스인 리스트에서 사용할 수 있으며, 튜플이나 문자열과 같은 불변 시퀀스에서는 사용할 수 없습니다.
# 리스트 슬라이스에 할당
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers[2:7] = [20, 21, 22]
print(numbers) # 출력: [0, 1, 20, 21, 22, 7, 8, 9]