[파이썬] 배열 슬라이싱과 콤마(,)

InAnarchy·2023년 4월 12일
0

Python

목록 보기
3/14
post-thumbnail

배열을 슬라이싱하는 데 여러가지 방법이 있는데, 보다보면 생각보다 헷갈리는 경우가 많다.
완벽하게 정리해보자.

1차원 배열

배열 슬라이싱의 형식

배열 슬라이싱의 형식

배열[start : end : step]
  • start, end, step 모두 양/음수가 가능하다.
  • start는 시작하는 인덱스, end는 끝내는 인덱스, step은 증가폭/감소폭이다.
  • end번째 값은 가져오는 범위에 포함되지 않는다.
  • step은 선택사항.
  • 첫번째 인덱스는 0이고, 마지막 인덱스는 -1으로 사용할 수 있다.

예시

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]

2차원 배열

  • 콤마(,)를 기준으로 행열을 구분한다
  • 또는 [행][열]로 구분할 수 있다.

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]]
profile
github blog 쓰다가 관리하기 귀찮아서 돌아왔다

0개의 댓글