슬라이스(Slice)의 사용법은 아주 간단합니다.
먼저 기본 사용법에 대해서 알아보죠.
items[start:stop] # 리스트의 start 인덱스에서 stop-1 인덱스까지 슬라이싱
items[start:] # 리스트의 start 인덱스에서 리스트의 마지막까지 슬라이싱
items[:stop] # 리스트의 처음부터 stop-1 인덱스까지 슬라이싱
items[:] # 리스트 전체 아이템들 반환(복사본)
예제 코드를 같이한번 볼께요.
items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
items[2:5] # 인텍스 2에서 인덱스 5까지(인덱스 5는 제외) 슬라이싱
# [2, 3, 4]
items[5:] # 인덱스 5에서 끝까지 슬라이싱
# [5, 6, 7, 8, 9, 10]
items[:3] # 처음부터 인덱스 3까지(인덱스 3은 제외) 슬라이싱
# [0, 1, 2]
items[:] # 처음부터 끝까지 슬라이싱(즉, 리스트 복사본 반환)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
위의 기본 사용 방법에서 step을 추가해 줄 수 있어요. 그럼 step 수 만큼 점프를 해가면서 슬라이스를 하게 됩니다. 콜론(:)을 하나 더 붙이고 step 수를 넣어주면 되요.
items[start:stop:step]
위의 4가지 기본 사용법에 대해서 step을 추가해보는 예제 코드입니다.
items[2:9:3] # 인덱스 2에서 인텍스 9까지(인덱스 9는 제외) 3칸씩 점프
# [2, 5, 8]
items[:10:2] # 처음부터 인텍스 10까지(인덱스 10은 제외) 2칸씩 점프
# [0, 2, 4, 6, 8]
items[2::2] # 인덱스 2에서 끝까지 2칸씩 점프
# [2, 4, 6, 8, 10]
items[::3] # 전체 리스트에 대해서 3칸씩 점프
# [0, 3, 6, 9]
슬라이스에서 start와 stop은 음수를 가질 수 있습니다. 음수 인덱스는 리스트의 뒤에서 부터 숫자를 세는것과 같아요. 따라서 음수 인덱스는 리스트의 길이를 모를때 굉장히 유용해요. 예를 들면 아래와 같죠.
items[-1] # 리스트의 길이는 모르지만 제일 마지막 값을 알고 싶을때
# 10
items[-2] # 리스트의 길이는 모르지만 제일 마지막에서 두번째 값을 알고 싶을때
# 9
이제 start와 stop에 음수를 적용해 볼께요.
items[-2:] # 마지막에서 두번째 아이템부터 리스트의 끝까지 슬라이싱
# [9, 10]
items[:-3] # 처음부터 리스트의 끝에서 세번째 아이템 전까지 슬라이싱(즉, 마지막 3개 아이템을 제외)
# [0, 1, 2, 3, 4, 5, 6, 7]
step도 이런 음수에 대한 규칙이 동일하게 적용됩니다. 즉, step이 -1이면 왼쪽으로 한칸씩 점프한다는 의미가 되죠. 예제 코드로 확인해 보겠습니다. 처음 음수 step을 접하면 조금 헷갈릴 수 있습니다. 파이썬 콘솔을 띄어놓고 여러가지를 테스트해보기를 추천드립니다.
items[10:0:-3] # 인텍스 10에서 0까지(인덱스 0은 제외) 역순으로 슬라이싱
# [10, 7, 4, 1]
items[5:1:-1] # 인덱스 5에서 1까지(인텍스 1은 제외) 역순으로 슬라이싱
# [5, 4, 3, 2]
items[1::-1] # 인덱스 1에서 끝까지 역순으로 슬라이싱
# [1, 0]
items[1:10:-1] # 인텍스 1에서 인덱스 10까지(인덱스 10인 제외) 역순으로 슬라이싱, 하지만 슬라이싱 못하므로 빈 리스트 반환
# []
items[:-3:-1] # 리스트 끝에서 3번째 인덱스까지(인덱스 -3은 제외) 역순으로 슬라이싱
# [10, 9]
items[0:-3:-1] # 인텍스 0에서부터 리스트 끝에서 3번째 인덱스까지(인텍스 -3은 제외) 역순으로 슬라이싱, 하지만 슬라이싱 못하므로 빈 리스트 반환
# []
items[::-1] # 리스트 처음부터 끝까지 역순으로 슬라이싱
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
items[::-2] # 리스트 처음부터 끝까지 역순으로 2칸씩 슬라이싱
# [10, 8, 6, 4, 2, 0]
추가적으로, 리스트에서 슬라이스(slice) 기호(:) 대신에 slice() 힘수를 사용할 수 도 있습니다. 즉, 아래 표현은
items[start:stop:step]
다음과 같이 slice()함수를 사용해서 표현할 수 도 있습니다.
items[slice(start, stop, step)]
'파이썬 > 자주하는 질문' 카테고리의 다른 글
파이썬(Python) 함수 참조에 의한 호출? (0) | 2020.09.10 |
---|---|
파이썬(Python) 2차원 리스트 합치기 (0) | 2020.09.09 |
파이썬(Python) 리스트 복사하기 (0) | 2020.09.09 |
파이썬(Python) 사용자 키보드 입력받는 방법 (0) | 2020.09.08 |
파이썬(Python) 여러개 변수들 값 체크하기 (0) | 2020.09.08 |
댓글