<jupyter_start><jupyter_text>한 슬라이스에 start, end, stride를 함께 쓰지 말자Pyhthon에는 기본 slicing 뿐만 아니라 ```py somelist[start:end:stride]``` 처럼 슬라이스의 stride를 설정하기도 한다.  이 문법을 이용하면 시퀀스를 슬라이스할 때 n번째 아이템을 가져올 수 있다.예를 들어 stride를 쓰면 리스트의 홀수와 짝수 index를 쉽게 그룹으로 묶을 수 있다.<jupyter_code>a = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']
odds = a[::2]
evens = a[1::2]
print(odds)
print(evens)<jupyter_output>['red', 'yellow', 'blue']
['orange', 'green', 'purple']<jupyter_text>stride 문법이 종종 예상치 못한 동작을 통해 버그를 만들기도 한다.예를 들어 Python 에서 byte 문자열을 역순으로 만드는 일반적인 방법은 stride -1 로 문자열을 slice하는 것이다.<jupyter_code>x = b'mongoose'
y = x[::-1]
print(y)<jupyter_output>b'esoognom'<jupyter_text>위 코드는 byte 문자열이나 ASCII 문자에는 잘 동작하지만, UTF-8 byte 문자열로 encode 된 unicode 문자에는 원하는 대로 동작하지 않는다.<jupyter_code>w = '示例仅是示例'
x = w.encode('utf-8')
y = x[::-1]
z = y.decode('utf-8')<jupyter_output><empty_output><jupyter_text>-1을 제외한 음수 값으로 stride를 지정한 경우<jupyter_code>a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
print(a[::2])  # ['a', 'c', 'e', 'g']
print(a[::-2]) # ['h', 'f', 'd', 'b']<jupyter_output>['a', 'c', 'e', 'g']
['h', 'f', 'd', 'b']<jupyter_text>`::2`처음부터 시작해서 매 두 번째 아이템을 선택하라는 의미다. `::-2`끝부터 시작해서 반대 방향으로 매 두 번재 아이템을 선택하라는 뜻이다.<jupyter_code>print(a[2::2])    # ['c', 'e', 'g']
print(a[-2::-2])  # ['g', 'e', 'c', 'a']
print(a[-2:2:-2]) # ['g', 'e']
print(a[2:2:-2])  # []<jupyter_output>['c', 'e', 'g']
['g', 'e', 'c', 'a']
['g', 'e']
[]<jupyter_text>slicing 문법의 stride 부분이 매우 혼란스러울 수 있다.`[start:end:stride]` 가 서로 연계되어 어떤 작용을 하는지 분명하지 않다. 특히 stride가 음수인 경우 그러하다.이런 문제를 방지하려면 stride를 start, end index와 함께 사용하지 않아야 한다.__stride 사용시 양수값을 사용, start, end index 는 생략하는게 좋다.__  stride를 start, end index와 함께 사용할 경우 __결과를 변수에 할당하고, 이 변수를 slice한 결과를 다른 변수에 할당해서 사용하자.__<jupyter_code>b = a[::2]  # ['a', 'c', 'e', 'g']
c = b[1:-1] # ['c', 'e']<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.22016348773841962, 'fraction_numerical': 0.014713896457765668, 'mean_word_length': 4.961038961038961, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '355693', 'license': 'CNRI-Python', 'n_tokens_mistral': 1200, 'n_tokens_neox': 1408, 'n_words': 248, 'path': "Chap 1: Think as PYTHON/Chap 6 Don't use start, end, stride in one slice.ipynb", 'repo_name': 'HILTON731/Effective-PYTHON', 'size': '1835'}