배열을 슬라이싱하는 데 여러가지 방법이 있는데, 보다보면 생각보다 헷갈리는 경우가 많다.
완벽하게 정리해보자.
배열 슬라이싱의 형식
배열[start : end : step]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
일 때
print("len of a: ", len(a))
print(a[0:3]) #[0, 1, 2]
print(a[1:5]) #[1, 2, 3, 4]
print(a[0:len(a)]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("len of b: ", len(b))
print(b[0:5]) #[1, 2, 3, 4, 5]
print(b[1:3]) #[2, 3]
print(b[0:len(b)]) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
폭(step)을 추가해보자.
print(a[0:5:1]) #[0, 1, 2, 3, 4]
print(a[0:len(a):1]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[0:9:3]) #[0, 3, 6]
지금까지는 앞에서 뒤로 슬라이싱했지만, 사실 뒤에서 앞으로 할 수도 있다!
print(a[-1:0:-1]) #[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(a[-3]) #8
print(a[-3:0:-3]) #[8, 5, 2]
print(a[4:-1]) #[4, 5, 6, 7, 8, 9]
시작 인덱스를 생략하면 첫 인덱스부터 가져온다는 뜻이다.
print(a[:7]) #[0, 1, 2, 3, 4, 5, 6]
print(a[:7:1]) #[0, 1, 2, 3, 4, 5, 6]
print(a[:7:-1]) #[10, 9, 8]
끝 인덱스를 생략하면 마지막 요소까지 가져온다는 뜻이다.
print(a[7:]) #[7, 8, 9, 10]
print(a[7: :1]) #[7, 8, 9, 10]
print(a[7: :-1]) #[7, 6, 5, 4, 3, 2, 1, 0]
print(a[: :1]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[: :-1]) #[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(a[: :-2]) #[10, 8, 6, 4, 2, 0]
또 시작과 끝 인덱스를 모두 생략하면 리스트 전체를 가져온다.
이 때 a[:]와 a[::]는 결과가 같다.
print(a[:]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[::]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numpy를 사용하여 2차원 배열을 생성해보자.
a = np.array([[0, 1, 2, 3], [4, 5, 6, 7]])
print(a.shape) #(2, 4)
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
이 때 인덱싱은 다음과 같다.
print(a[1][3]) #7
print(a[0][-1]) #3
그렇다면 슬라이싱은 어떻게 해야할까?
print(a[0,3]) #3
print(a[0]) #[0 1 2 3]
print(a[0,:]) #[0 1 2 3]
print(a[0:len(a)])
# [[0 1 2 3]
# [4 5 6 7]]
print(a[:,0]) #[0 4]
print(a[:,1]) #[1 5]
print(a[0:2, 1:4]) #행: 인덱스 0~1 열:인덱스 1~3
#[[1 2 3]
# [5 6 7]]