본문 바로가기
기타 언어/Python

[Python] 파이썬 2차원 리스트 Slicing / 일부분 선택, 추출하기 ✨

by 서상혁 2020. 8. 1.

 

파이썬에서 1차원 리스트을 슬라이싱하는건 간단합니다.

arr = "ABCDE" 

arr[0:3] = "ABC" 

 

하지만 리스트가 2차원 이라면?

 

꽤나 골치아파지죠.

numpy를 이용하면 되지만, numpy가 익숙하지 않은 저로서는

그냥 파이썬 문법을 이용합니다!

 

2차원 배열 Slicing

 

2차원 배열 을 순회하면서 특정 2차원 배열만 빼내어 보고싶을 때!

어떻게 해야할까요? 

예시를 드릴테니 한번 맞춰보세요 ! 

 

5 * 5 크기의 OX  판이 있습니다.

[

  "OXOOO",

  "XOXXO",

  "OOXOO",

  "XOOOX",

  "OXOXO",

]

 

이 맵의 일부분이 3 * 3 인 다음과 같은판 일치하는지 확인하고 싶습니다. 

[

  "OXO",

  "XOX",

  "OXO",

]

 

어떻게 하면 좋을까요?

 

 


 

답은 좀 더 보기 편한 리스트로 해보죠!

다음과 같이 각 행과 열을 나타내는 튜플로 이루어진 2차원 리스트가 있습니다.

 

field = [

 

    [(00), (01), (02), (03), (04)],

 

    [(10), (11), (12), (13), (14)],

 

    [(20), (21), (22), (23), (24)],

 

    [(30), (31), (32), (33), (34)],

 

    [(40), (41), (42), (43), (44)],

 

]

 

여기서 2*3 만큼을 계속 추출해보겠습니다. 

 

2차원 배열 slicing 코드

 

출력값


결국 핵심은

✨ [row[j:j+m] for row in field[i:i+n]] ✨

 입니다.

 

field 에서 i ~ i+n 만큼의 row 들을 Slicing한 후,

Slicing 된  row들을 j ~ j+m 만큼 Slicing하여 다시 2차원 List 로 만들어 줍니다. 

 


 

코딩테스트 특성상 문자열 배열, 2차원 배열을 다룰 일이 많다보니, 다음과 같은 방식이 자주 사용됩니다.

Python 으로 코딩테스트를 준비하시는 분은 알아두시면 유용할 것 같네요! 😁 

앞서 제시했던 예제는 문자열 배열이지만, 문자열도 슬라이싱이 되니, 똑같은 방법으로 해결이 가능합니다.

꼭 스스로 해보시면서 실력 향상시키시길!!

 

 

 

 

 

 

 

728x90

댓글