12. 스트라이드와 슬라이스를 한 식에 함께 사용하지 않기

 

스트라이드를 사용하면 시퀀스를 슬라이싱하면서 매 n 번째 원소만 가져올 수 있다.

 

Ex)

x = ['빨강', '주황', '노랑', '초록', '파랑', '자주']

// 시작부터 매 두 번째 원소를 선택
odds = x[::2]
>>['빨강', '노랑', '파랑']

evens = x[1::2]
>>['주황', '초록', '자주']

 

그러나 종종 예기치 못한 동작이 일어나서 버그를 야기한다.

 

일반적으로 바이트 문자열을 뒤집는 가장 일반적인 기법은 -1을 증가값으로 사용해 문자열을 슬라이싱하는 것이다. 

유니코드 문자열에서도 잘 작동한다.

 

하지만 유니코드 데이터를 UTF-8로 인코딩한 문자열에서는 이 코드가 작동하지 않는다.

 

-1 말고 다른 음수도 확인해보자

x = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
x[::2] = ['a', 'c', 'e', 'g']
x[::-2] = ['h', 'f', 'd', 'b']

x[2::2] = ['c', 'e', 'g']
x[-2::-2] = ['g', 'e', 'c', 'a']
x[-2:2:-2] = ['g', 'e']
x[2:2:-2] = []

 

슬라이싱 구문에 스트라이딩까지 들어가면 아주 혼란스럽다.

게다가 증가값에 따라 시작값과 끝값이 어떤 역할을 하는지 불분명하다.

따라서 시작값이나 끝값을 증가값과 함께 사용하지 말 것을 권장한다.

세 파라미터를 모두 사용하는 경우, 두 번 대입을 사용(한 번은 스트라이딩, 한 번은 슬라이싱)하거나 itertools 내장 모듈인 islice 사용

 

본 블로그는 [파이썬 코딩의 기술] 서적을 참고하여 작성하였습니다.

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기