Skip to content

Latest commit

 

History

History
47 lines (35 loc) · 1.58 KB

BetterWay12.md

File metadata and controls

47 lines (35 loc) · 1.58 KB

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

1. 스트라이드

  • 리스트의 일정한 간격을 두고 슬라이싱할 수 있는 구문

    • 리스트[시작:끝:증가값]
    x = ['빨강', '주황', '노랑', '초록', '파랑', '자주']
    odds = x[::2]
    evens = x[1::2]
    print(odds)
    print(evens)
    
    >>>
    ['빨강', '노랑', '파랑']
    ['주황', '초록', '자주']
  • 단점

    • 바이트 문자열 혹은 유니코드 문자열을 역으로 뒤집는 방법: 증가값에 -1 사용
    • 유니코드 데이터를 UTF-8 로 인코딩한 문자열은 작동 x
    w = '寿司' 
    x = w.encode('utf-8')
    y = x[::-1]
    z = y.decode('utf-8')
    
    >>>
    Traceback ...
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in
    position 0: invalid start byte
    • 2바이트로 표현될 수 있는 utf-8로 인코딩된 문자열은 문제 발생 가능성 존재

2. 스트라이드와 슬라이스를 한 식에 사용하면 안되는 이유

  • 한 식에 스트라이드, 슬라이스가 존재하면 가독성 떨어짐, 직관적으로 알기 힘듬

3. 방법

  • 증가값을 사용해야 하는 경우 양수를 사용하고 시작, 끝 인덱스 생략을 권장
  • 시작, 끝, 증가값 모두 사용해야 하는 경우 스트라이딩 먼저 진행, 이후 슬라이스
    • 첫번째 연산은 슬라이스 크기를 가능한 줄이는 것!
  • 시간, 메모리 고려가 필요하다면 itertools 내장 모듈의 islice 메서드 고려(Better Way 36)