[Python] 파이썬 리스트 슬라이싱 정리 ([start:end:step] 완전 이해)
안녕하세요. BlockDMask 입니다.
오늘은 파이썬에서 리스트를 원하는 구간만 잘라서 다루는 방법, 슬라이싱(Slicing)에 대해 정리해보겠습니다.
특히 초보자가 헷갈리기 쉬운 start
, end
, step
개념을 정확히 짚어가면서 설명하겠습니다.
0. 슬라이싱 기본 문법과 개념
- 슬라이싱 문법:
list[start:end:step]
- start : 가져올 시작 인덱스 (포함)
- end : 가져올 끝 인덱스 (포함하지 않음)
- step : 간격 (기본은 1)
※ 인덱스는 0번부터 시작합니다.
※ end 인덱스는 가져오지 않고, 직전까지만 포함합니다.
※ step을 생략하면 기본값 1이 적용됩니다.
1. 기본 슬라이싱 (start:end)
numbers = [11, 22, 33, 44, 55, 66]
print(numbers[1:4]) # [22, 33, 44]
설명:
- 1번 인덱스(22)부터 4번 인덱스 직전(3번 44)까지 가져옵니다.
- 4번 인덱스(55)는 포함되지 않습니다.
2. start 또는 end 생략하기
numbers = [11, 22, 33, 44, 55, 66]
print(numbers[:3]) # [11, 22, 33]
print(numbers[2:]) # [33, 44, 55, 66]
설명:
- [:3]
는 처음부터 3번 인덱스 직전까지 (0,1,2번)
- [2:]
는 2번 인덱스(33)부터 끝까지 모두 가져옵니다.
3. step 사용하기 (start:end:step)
numbers = [11, 22, 33, 44, 55, 66]
print(numbers[0:6:2]) # [11, 33, 55]
설명:
- 0번(11)부터 6번 인덱스 직전까지 2칸씩 건너뛰며 가져옵니다.
- 0 → 2 → 4번 인덱스 요소를 가져온 결과입니다.
4. step만 사용하는 경우
numbers = [11, 22, 33, 44, 55, 66]
print(numbers[::3]) # [11, 44]
설명:
- start와 end를 생략하고 step=3만 지정.
- 0번(11), 3번(44) 인덱스 요소를 가져옵니다.
5. 음수 인덱스 사용하기 (뒤에서부터 세기)
numbers = [11, 22, 33, 44, 55, 66]
print(numbers[-4:-1]) # [33, 44, 55]
설명:
- -4번 인덱스(33)부터 -1번 인덱스 직전(-2번 55)까지 가져옵니다.
- 음수 인덱스는 리스트 뒤에서부터 셉니다.
6. 음수 step 사용 (역순 슬라이싱)
numbers = [11, 22, 33, 44, 55, 66]
print(numbers[::-1]) # [66, 55, 44, 33, 22, 11]
설명:
- step을 -1로 설정하면 리스트가 뒤집힙니다.
- 데이터를 역순으로 정렬할 때 사용합니다.
7. 특정 구간을 역순으로 가져오기
numbers = [11, 22, 33, 44, 55, 66]
print(numbers[5:2:-1]) # [66, 55, 44]
설명:
- 5번 인덱스(66)부터 2번 인덱스(33) 직후까지 역순으로 가져옵니다.
- 음수 step을 사용할 때는 start > end 여야 합니다.
8. 리스트 전체 복사 ([:] 사용)
numbers = [11, 22, 33, 44, 55, 66]
copy_numbers = numbers[:]
print(copy_numbers) # [11, 22, 33, 44, 55, 66]
설명:
- [:]를 쓰면 리스트를 통째로 복사할 수 있습니다.
- 복사본을 수정해도 원본에는 영향을 주지 않습니다.
9. 짝수 인덱스 요소만 가져오기
numbers = [11, 22, 33, 44, 55, 66]
even_numbers = numbers[::2]
print(even_numbers) # [11, 33, 55]
설명:
- 0번(11), 2번(33), 4번(55)처럼 짝수 인덱스만 골라 가져옵니다.
- 데이터 샘플링할 때 유용합니다.
10. 슬라이싱으로 리스트 비우기
numbers = [11, 22, 33, 44, 55, 66]
numbers[0:] = []
print(numbers) # []
설명:
- 리스트 전체 범위에 빈 리스트를 대입해 모든 요소를 삭제합니다.
- 리스트를 비우거나 초기화할 때 사용합니다.
결론
[start:end]
로 원하는 구간 추출 가능 (start 포함, end 미포함)[start:end:step]
으로 간격 조절 가능- 음수 인덱스, 음수 step으로 역방향 처리 가능
- 전체 복사 또는 일부 삭제도 슬라이싱으로 가능
이상, 파이썬 리스트 슬라이싱 완전 정리에 대해 알아보았습니다.
오늘도 읽어주셔서 감사합니다.