python - Extended Slices

whybein·2020년 2월 13일
0

Python

목록 보기
5/7
post-thumbnail

https://docs.python.org/3/whatsnew/2.3.html?highlight=slice#extended-slices

프로그래밍 알고리듬 문제를 풀다 보면, 문자열 또는 숫자를 거꾸로 한다거나 순서 또는 문자수를 활용해야 하는 경우가 많이 있습니다. 숫자도 문자열 형식으로 변환한 다음 코드를 짜기도 하는데 오늘은 slice를 어떻게 쓸 수 있는지 정리해 보려고 합니다.

 

my_list[ start : stop : step ]

  • start : 시작점
  • stop : 끝점
  • stet : 건너뛸 간격

 

세 항목 모두 필수가 아니며 빈칸일 경우 전체가 대상이 됩니다.

>>> L = [0,1,2,3,4,5,6,7,8,9]

>>> L[2:8:2]  # index 2번에서 시작 2칸씩 건너뛰어 가져오는데 8번에서 멈춘다.
[2, 4, 6]

>>> L[::2]  # index 0번에서 시작 2칸씩 건너뛰어 값을 가져온다.
[0, 2, 4, 6, 8]

>>> L[::-1]  # 전체를 거꾸로 한 칸 씩 건너뛴다. 거꾸로 정렬된 결과값이 나옵니다.
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

 

이렇게 해보면 어떻게 나올까요?

>>> L[:-1:1]  # index 0번부터 1칸씩 건너뛰어 가져오고 끝에서 첫번째에서 멈춘다.
[0, 1, 2, 3, 4, 5, 6, 7, 8]

>>> L[:-2:-2] # index 0번에서 시작, 끝에서 2번째에서 멈추는데 거꾸로 2칸씩 건너뛴다.
[9]

>>> L[:-6:-2] # index의 끝번에서 시작해 2칸씩 건너뛰어 값을 가져오고 6번에서 멈춘다.
[9, 7, 5]     # step에 -가 붙으면 start 시작점이 끝번이 됩니다.

>>> M = [9,8,7,6,5,4,3,2,1,0]
>>> M[:6:2]
[9, 7, 5]

 

다행히 문자열에도 적용됩니다.

>>> S = 'ABCDEFG'

>>> S[::2]
'ACEG'

>>> S[::-1]
'GFEDCBA'

 

다음의 것들도 가능할까요?

>>> L[::5]
[0, 5]
>>> L[::5] = [10, 10]  # 당연히 양쪽 리스트 개수가 같아야 합니다.
>>> L
[10, 1, 2, 3, 4, 10, 6, 7, 8, 9]

>>> del L[::5]  # 삭제도 가능합니다.
>>> L
[1, 2, 3, 4, 6, 7, 8, 9]

 

문자열의 수정, 삭제는 지원하지 않습니다. 하지만 slicing을 잘 활용하면 코드를 간결하게 짤 수 있는 것은 확실합니다.

profile
Back-End Developer

0개의 댓글