[파이썬에서 살아남는법 제 10장] 시퀀스를 슬라이싱하는 방법을 익혀라
2023. 2. 13. 20:40ㆍDL Study
※본 내용은 파이썬의 코딩 기술 (개정 2판)을 바탕으로 작성 했습니다.
파이썬에는 시퀀스를 여러조각으로 Slice(나누는) 슬라이싱 구문이 있다. 이러한 구문을 사용하면 최소의 노력으로 하위 부분집합 으로 찾아갈수 있다. 어떠한 파이썬 클래스 구문에서도 슬라이싱 구문을 추가 할수 있다.
슬라이싱 구문의 기본 형태는 리스트[시장:끝] 이다.
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
print('Middle two: ', a[3:5])
print('All but ends:', a[1:7])
>>>
Middle two:
['d', 'e']
All but ends: ['b', 'c', 'd', 'e', 'f', 'g']
시작과 끝을 모두 포함하는 인덱스를 할때는 그냥 생략 하는것이 좋다.
assert a[:5] == a[0:5]
assert a[5:] == a[5:len(a)]
리스트를 끝에서부터 인덱스를 할때는 음수 인덱스를 사용하면 된다.
a[:] #['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
a[:5] #['a', 'b', 'c', 'd', 'e']
a[:-1] #['a', 'b', 'c', 'd', 'e', 'f', 'g']
a[4:] #['e', 'f', 'g', 'h']
a[-3:] #['f', 'g', 'h']
a[2:5] #['c', 'd', 'e']
a[2:-1] #['c', 'd', 'e', 'f', 'g']
슬라이싱을 할때 리스트의 인덱스 범위를 넘어가면 무시된다. 이러한 동작으로 원하는 최대 길이를 쉽게 지정할 수 있다.
슬라이싱된 리스트의 특징으로 슬라이싱한 결과는 완전히 새로운 리스트이다. 따라서 스라이싱한 리스트를 수정하더라도 원본 리스트는 변화가 없다.
b = a[3:]
print('Before:', b)
b[1] = 99
print('After:', b)
print('No change:', a)
>>>
Before:['d', 'e', 'f', 'g', 'h']
After:['d', 99, 'f', 'g', 'h']
No change: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
따라서 리스트를 슬라이싱 함으로써 리스트를 다음과 같이 줄이거나 늘이는것도 가능하다.
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']
print('Before ', a)
a[2:3] = [47, 11]
print('After ', a)
>>>
Before ['a', 'b', 99, 22, 14, 'h']
After ['a', 'b', 47, 11, 22, 14, 'h']
슬라이싱 한구역보다 대입하는 원소의 갯수가 클때는 리스트가 늘어나고, 원소의 갯수가 작다면 줄어든다.
슬라이싱에서 시작, 끝의 인덱스를 모두 생략하면 원래의 리스트를 복사한 새로운 리스트를 얻을수 있다
b = a
print('Before a', a)
print('Before b', b)
a[:] = [101, 102, 103]
assert a is b # 업전히 같은 리스트 객체임
print('After a ',a) # 업데이트 된 내용
print('After b ',b) # 같은 리스트 객체이기 때문에 a 와 내용이 같음
>>>
Before a: ['a','b',47, 11, 22, 14, 'h']
Before b: ['a','b',47, 11, 22, 14, 'h']
After a : [101,102,103]
After b : [101,102,103]
'DL Study' 카테고리의 다른 글
[파이썬에서 살아남는법 제 12장] 슬라이싱보다는 나머지를 모두 잡아내는 언패킹을 사용하라 (0) | 2023.02.15 |
---|---|
[파이썬에서 살아남는법 제 11장] 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라 (0) | 2023.02.14 |
[밑바닥 부터 시작하는 딥러닝] 6장 학습 관련 기술들 (0) | 2023.01.31 |
[파이썬에서 살아남는법 제 9장] 대입식을 사용해 반복을 피하라 (0) | 2023.01.18 |
[밑바닥 부터 시작하는 딥러닝] 5장 Backpropagation (0) | 2023.01.18 |