https://docs.python.org/3/whatsnew/2.3.html?highlight=slice#extended-slices
프로그래밍 알고리듬 문제를 풀다 보면, 문자열 또는 숫자를 거꾸로 한다거나 순서 또는 문자수를 활용해야 하는 경우가 많이 있습니다. 숫자도 문자열 형식으로 변환한 다음 코드를 짜기도 하는데 오늘은 slice를 어떻게 쓸 수 있는지 정리해 보려고 합니다.
my_list[ start : stop : step ]
>>> 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을 잘 활용하면 코드를 간결하게 짤 수 있는 것은 확실합니다.