1. 시퀀스 슬라이스란?
슬라이스: 무엇인가의 일부를 잘라낸다는 뜻
시퀀스 슬라이스: 시퀀스 객체의 일부를 잘라낸다.
2. 사용법
-시퀀스 객체[시작 인덱스:끝 인덱스]
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> a[0:3]
[1, 2, 3]
주의할 점: 끝 인덱스는 범위에 포함되지 않는다.
즉, 처음부터 끝까지 가져오려면 요소의 개수의 +1을 끝 인덱스로 지정해야 함
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> a[0:11]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3. 시작 인덱스와 끝 인덱스가 같을 때
인덱스가 4부터 3까지 잘라서 새 리스트를 만드는 건데 범위가 이상해서 아무것도 출력되지 않음
>>> a=[1,3,5,6,7,8,9]
>>> a[4:4]
[]
4. 자기 자신 인덱스 출력 법
끝 인덱스에 1을 더 크게 지정하면 시작 인덱스 출력됨
>>> a=[1,3,5,6,7,8,9]
>>> a[4:5]
[7]
5. 리스트의 중간 부분 가져오기
>>> a=[1,3,5,6,7,8,9]
>>> a[2:6]
[5, 6, 7, 8]
또한, 음수를 인덱스로 지정가능
>>> a=[1,3,5,6,7,8,9]
>>> a[4:-1]
[7, 8]
>>> a[-6:-1]
[3, 5, 6, 7, 8]
6. 인덱스 증가폭 사용하기
>>> a=[1,3,5,6,7,8,9]
>>> a[1:7:3]
[3, 7]
다시 기억하자. 증가폭을 지정하더라도 가져오는 인덱스(끝-1)를 넘어설 수 없다.
7. 인덱스 생략하기
인덱스 0부터 시작하는 시작 인덱스를 생략 가능
끝 인덱스도 생략 가능
>>> a=[1,3,5,6,7,8,9]
>>> a[:5] #원래는 a [0:5]
[1, 3, 5, 6, 7]
>>> a[2:] #원래는 a [2:7]
[5, 6, 7, 8, 9]
둘 다 생략한다면? 리스트 전체를 가져온다.
>>> a=[1,3,5,6,7,8,9]
>>> a[:]
[1, 3, 5, 6, 7, 8, 9]
8. 인덱스를 생략하면서 증가폭 사용
>>> a=[1,3,5,6,7,8,9]
>>> a[:5:2] #시작 인덱스 생략
[1, 5, 7]
>>> a[1::2] #끝 인덱스 생략
[3, 6, 8]
>>> a[1:7:] #증감 인덱스에 공백이면 1씩 증가
[3, 5, 6, 7, 8, 9]
>>> a[::2]
[1, 5, 7, 9] #시작 인덱스와 끝 인덱스 생략이면 리스트 전체임
>>> a[::]
[1, 3, 5, 6, 7, 8, 9] #모두 공백이면 전체 출력
>>> a[::-1]
[9, 8, 7, 6, 5, 3, 1] #증가폭을 음수로 설정하면 반대로 뒤집어서 출력
9. len 응용하기
>>> a=[10,20,30,40,50,60,70,80,90]
>>> a[0:len(a)]
[10, 20, 30, 40, 50, 60, 70, 80, 90] #a의 길이가 9니까 인덱스 8까지 출력
10. 튜플, range, 문자열에 슬라이스 사용하기
튜플[시작 인덱스:끝 인덱스]
튜플[시작 인덱스:끝 인덱스:인덱스 증가폭]
>>> b=(10,20,30,40,50,60,70)
>>> b[3:5]
(40, 50)
>>> b[4:]
(50, 60, 70)
>>> b[:7:2]
(10, 30, 50, 70)
range객체[시작 인덱스:끝 인덱스]
range객체[시작 인덱스:끝 인덱스:인덱스 증가폭]
>>> r=range(10)
>>> r
range(0, 10)
>>> r[4:7]
range(4, 7)
>>> r[:10]
range(0, 10)
>>> r[:7:2]
range(0, 7, 2)
range는 리스트, 튜플과는 달리 요소가 모두 표시되지 않고 생성 범위만 표시된다.
그럼 range객체를 리스트로 만들려면?
>>> list(r[:7:2])
[0, 2, 4, 6]
문자열[시작 인덱스:끝 인덱스]
문자열[시작 인덱스:끝 인덱스:인덱스 증가폭]
>>> h='Hello, world'
>>> h[2:7]
'llo, '
>>> h[2:]
'llo, world'
>>> h[::2]
'Hlo ol'
11. 슬라이스 객체 사용
슬라이스 객체 = slice(끝 인덱스)
슬라이스 객체 = slice(시작 인덱스, 끝 인덱스)
슬라이스 객체 = slice(시작 인덱스, 끝 인덱스, 인덱스 증가폭)
시퀀스 객체[슬라이스 객체]
시퀀스 객체.__getitem__(슬라이스 객체)
>>> range(10)[slice(4,8,2)]
range(4, 8, 2)
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> s=slice(4,8)
>>> a[s]
[40, 50, 60, 70]
12. 슬라이스 요소 대체하기
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a [2:5]=['a', 'b', 'c']
>>> a
[0, 10, 'a', 'b', 'c', 50, 60, 70, 80, 90] #대체됨
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:5]='a'
>>> a
[0, 10, 'a', 50, 60, 70, 80, 90] #요소의 개수가 줄어듦
슬라이스 범위보다 할당할 요소 개수가 적을 때는 리스트의 개수가 줄어든다.
반대로 요소 개수가 많으면 리스트 요소의 개수도 늘어난다.
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a [2:8:2]='a', 'b', 'c'
>>> a
[0, 10, 'a', 30, 'b', 50, 'c', 70, 80, 90]
단, 인덱스의 증가폭을 지정했을 때는 슬라이스 범위의 요소 개수가 할당할 요소 개수가 정확히 일치해야 한다.
튜플, range, 문자열은 슬라이스 범위를 지정하더라도 요소를 할당할 수 없다.
13. del 슬라이스 삭제
del 시퀀스 객체[시작 인덱스:끝 인덱스]
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del a[2:5]
>>> a
[0, 10, 50, 60, 70, 80, 90]
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del a[2:8:2]
>>> a
[0, 10, 30, 50, 70, 80, 90]
'IT지식 > Python' 카테고리의 다른 글
파이썬 if조건문 (0) | 2021.10.11 |
---|---|
파이썬 딕셔너리 (0) | 2021.10.10 |
파이썬 인덱스(index) (0) | 2021.10.09 |
파이썬 시퀀스 자료형 (1) | 2021.10.09 |
파이썬 튜플(tuple) (0) | 2021.10.08 |