a = [0,1,2,3,4,5,6,7]
a[0:4]
[0,1,2,3]
슬라이스는 [] 안에 :를 기준으로 시작 인덱스와 끝 인덱스를 지정하여 가져올 수 있다.
여기서 주의해야할 점은 가려오려는 인덱스보다 1을 더 크기 지정해줘야 한다.
슬라이스를 사용할 때 : 를 기준으로 시작 인덱스와 끝 인덱스가 같은 경우 아무것도 가져오지 않는다.
a = [1,2,3,4]
a[1:1]
[]
a = [0,1,2,3,4,5,6,7]
a[3:5]
[3,4]
시작 인덱스를 3으로 잡아주고 끝 인덱스를 5로 잡아주어 3번째, 4번째 인덱스를 가져온 것을 확인할 수 있다.
a = [0,1,2,3,4,5,6,7]
a[3:-1]
[3, 4, 5, 6]
슬라이스는 음수를 지정해 줄 수 있는데 끝 인덱스가 -1이므로 3번째 인덱스부터 -2번째(6번째) 인덱스까지 출력해준다.
a = [0,1,2,3,4,5,6,7]
a[0:7:2]
[0, 2, 4, 6]
인덱스의 증가폭을 정해줄 수 있는데 위의 값을 보면 0번째 인덱스에서 7번째 인덱스까지 출력을 하지만 증가되는 폭을 2로 정해주었다. 결과로 0,2,4,6이 출력된 것을 볼 수 있다.
슬라이스를 사용할 때 시작 인덱스와 끝 인덱스를 생략할 수 있다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[:7] # 0번째 인덱스부터 6번째 인덱스 까지의 값을 가져온다.
[0, 10, 20, 30, 40, 50, 60]
a[3:] # 3번째 인덱스부터 끝 인덱스 까지의 값을 가져온다.
[30, 40, 50, 60, 70, 80, 90]
a[:] # 리스트 전체를 가져온다.
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[::2] # 증가폭 2를 적용시킨 인덱스의 값을 가져온다.
[0, 20, 40, 60, 80]
a[::-1] # 리스트 전체에서 인덱스를 1씩 감소시키면서 가져오므로 리스트를 반전시킨다.
[90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
슬라이스는 리스트, 튜플, range, 문자열에 모두 사용할 수 있다.
튜플에 사용할 수 있는 이유는 인덱스의 값을 변하게 하는 것이 아닌 값은 그대로 유지시키면서 필요한 부분만 잘라오기 때문이다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:5] = ['a','b','c']
print(a) == [0, 10, 'a', 'b', 'c', 50, 60, 70, 80, 90]
위와 같이 해당 되는 인덱스의 값을 변경할 때는 새로운 리스트가 생성되지 않고 원래 있던 리스트의 값이 변경된다.
요소를 할당할때 굳이 slice 시킨 요소의 개수를 맞추지 않아도 알아서 할당된다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:5] = ['a']
print(a) == [0, 10, 'a', 50, 60, 70, 80, 90] # 2,3,4번째 인덱스가 삭제되고 'a'로 대체 된 것을 알 수 있다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[3:6] = ['a', 'b', 'c', 'd', 'e']
print(a) == [0, 10, 20, 'a', 'b', 'c', 'd', 'e', 60, 70, 80, 90] # 3,4,5의 값이 사라지고 'a', 'b', 'c', 'd', 'e'의 값이 들어온 것을 볼 수 있다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:7:2] = ['a','b','c']
print(a) = [0, 10, 'a', 30, 'b', 50, 'c', 70, 80, 90] # 주의해야 하는 것은 증가폭을 설정해 주었을 때는 슬라이스의 요소 개수와 할당하고자 하는 요소의 개수가 동일해야 한다.
튜플, range, 문자열은 범위를 지정해주더라도 요소를 변경해 줄 수 없다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
del a[2:5]
print(a) == [0, 10, 50, 60, 70, 80, 90]
2~4번째 인덱스를 삭제해주어 결과값이 나온 경우