Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- HelloWorld
- 주식분석
- yarn
- python
- collections
- scrapy
- recursion
- effective python
- 알고리즘
- 하둡2
- C언어
- 선형대수
- codingthematrix
- 코딩더매트릭스
- graph
- 딥러닝
- Sort
- LSTM
- RNN
- tensorflow
- hadoop2
- 하이브
- C
- 파이썬
- hive
- GRU
- NumPy
- Java
- 텐서플로
- 그래프이론
Archives
- Today
- Total
EXCELSIOR
BETTER WAY 5 - 시퀀스를 슬라이스하는 방법을 알자 본문
BETTER WAY 5 - 시퀀스를 슬라이스하는 방법을 알자
Item05 - Know How to Slice Sequences
- Python은 시퀀스를 슬라이스(slice: 자르기)해서 조각으로 만드는 문법을 제공한다.
- 이렇게 슬라이스를 이용하면 시퀀스(sequence)의 부분집합(subset)에 접근할 수 있다.
list, str, bytes
에서 슬라이스를 이용할 수 있다.- Slicing 문법은
somelist[start:end]
이며,start
인덱스는 포함되고end
인덱스는 제외된다.
1 2 3 4 5 6 7 8 9 10 11 | a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] print('First four:', a[:4]) print('Last four:', a[-4:]) print('Middle two:', a[3:-3]) '''출력결과 First four: ['a', 'b', 'c', 'd'] Last four: ['e', 'f', 'g', 'h'] Middle two: ['d', 'e'] ''' | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # list의 처음부터 슬라이스할 때는 0을 생략한다. # 아래의 코드에서 assert는 condition이 일치하지 않을 때 예외를 반환한다. assert a[:5] == a[0:5] # 마찬가지로 list의 끝까지 슬라이스 할 때도 마지막 인덱스는 넣지 않아도 된다. assert a[5:] == a[5:len(a)] # list의 끝을 기준으로 오프셋 계산을 할 때는 음수로 슬라이스를 하는게 편하다. print(a[:]) print(a[:5]) print(a[:-1]) print(a[4:]) print(a[-3:]) print(a[2:5]) print(a[2:-1]) print(a[-3:-1]) '''출력결과 ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] ['a', 'b', 'c', 'd', 'e'] ['a', 'b', 'c', 'd', 'e', 'f', 'g'] ['e', 'f', 'g', 'h'] ['f', 'g', 'h'] ['c', 'd', 'e'] ['c', 'd', 'e', 'f', 'g'] ['f', 'g'] ''' | cs |
1 2 3 4 5 6 7 8 9 10 11 | # 슬라이싱은 start와 end 인덱스가 리스트의 경계를 벗어나더라도 # 자동으로 적절하게 처리해준다. first_twenty_items = a[:20] last_twenty_items = a[-20:] print('first_twenty_items=', first_twenty_items) print('last_twenty_items=', last_twenty_items) '''출력결과 first_twenty_items= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] last_twenty_items= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] ''' | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 슬라이싱의 결과는 새로운 리스트를 반환한다. b = a[4:] print('Before: ', b) b[1] = 99 print('After: ', b) print('No change: ', a) '''출력결과 Before: ['e', 'f', 'g', 'h'] After: ['e', 99, 'g', 'h'] No change: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] ''' | cs |
1 2 3 4 5 6 7 8 9 10 11 | # list에 새로운 값을 할당할 경우 슬라이스 할당의 길이는 달라도 된다. # list는 새로 들어온 값에 맞춰 늘어나거나 줄어들기 때문이다. print('Before: ', a) a[2:7] = [99, 22, 14] print('After: ', a) '''출력결과 Before: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] After: ['a', 'b', 99, 22, 14, 'h'] ''' | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 슬라이스에 start와 end 인덱스를 지정하지 않고 할당하면 # 리스트의 전체 내용을 참조 대상의 복사본으로 대체한다. b = a print('Before: ', a) a[:] = [101, 102, 103] assert a is b print('After: ', b) '''출력결과 Before: ['a', 'b', 99, 22, 14, 'h'] After: [101, 102, 103] ''' | cs |
정리
start
인덱스에 0을 설정하거나end
인덱스에 시퀀스의 길이를 설정하지 말자.somelist[:end], somelist[start:]
- 슬라이싱은 범위를 벗어난
start
나end
인덱스를 허용한다. list
슬라이스에 할당하면 원본 시퀀스에 지정한 범위를 참조 대상의 내용으로 대체한다.
'Python > Effective Python' 카테고리의 다른 글
BETTER WAY 7 - map과 filter 대신 리스트 컴프리헨션을 사용하자 (0) | 2018.02.23 |
---|---|
BETTER WAY 6 - 한 슬라이스에 start, end, stride를 함께 쓰지 말자 (0) | 2018.01.29 |
BETTER WAY 4 - 복잡한 표현식 대신 헬퍼(Helper) 함수를 작성하자 (0) | 2018.01.29 |
BETTER WAY 03 - bytes, str, unicode의 차이점을 알자 (0) | 2018.01.22 |
BETTER WAY 02 - PEP 8 스타일 가이드를 따르자 (0) | 2018.01.22 |
Comments