1. 슬라이싱 기본 문법
슬라이싱은 자료에서 원하는 구간만 잘라내는 방법입니다.
자료형[start : end : step]
start
시작 위치입니다. 이 위치는 결과에 포함됩니다.
end
끝 위치입니다. 이 위치는 결과에 포함되지 않습니다.
step
몇 칸씩 건너뛸지 정합니다. 생략하면 1입니다.
a = [10, 20, 30, 40, 50]
print(a[1:4])
실행 결과: [20, 30, 40]
2. 리스트(List) 슬라이싱
리스트는 순서가 있고, 각 원소가 인덱스를 가지므로 슬라이싱이 가능합니다.
기본 코드
numbers = [10, 20, 30, 40, 50, 60]
print(numbers[0:3]) # 0번부터 2번까지
print(numbers[2:5]) # 2번부터 4번까지
print(numbers[:4]) # 처음부터 3번까지
print(numbers[3:]) # 3번부터 끝까지
print(numbers[:]) # 전체 복사
[10, 20, 30]
[30, 40, 50]
[10, 20, 30, 40]
[40, 50, 60]
[10, 20, 30, 40, 50, 60]
[30, 40, 50]
[10, 20, 30, 40]
[40, 50, 60]
[10, 20, 30, 40, 50, 60]
step 사용
numbers = [10, 20, 30, 40, 50, 60]
print(numbers[::2]) # 2칸씩 이동
print(numbers[1::2]) # 1번 인덱스부터 2칸씩 이동
print(numbers[::-1]) # 거꾸로 뒤집기
[10, 30, 50]
[20, 40, 60]
[60, 50, 40, 30, 20, 10]
[20, 40, 60]
[60, 50, 40, 30, 20, 10]
리스트 슬라이싱 수정
numbers = [10, 20, 30, 40, 50]
numbers[1:3] = [200, 300]
print(numbers)
[10, 200, 300, 40, 50]
3. 문자열(String) 슬라이싱
문자열도 문자들이 순서대로 나열된 자료형이므로 리스트처럼 슬라이싱할 수 있습니다.
기본 코드
word = "PYTHON"
print(word[0:2])
print(word[2:5])
print(word[:3])
print(word[3:])
PY
THO
PYT
HON
THO
PYT
HON
문자열 뒤집기
word = "PYTHON"
print(word[::-1])
NOHTYP
문자열은 직접 수정 불가
word = "PYTHON"
# word[0] = "A" # 오류 발생
new_word = "A" + word[1:]
print(new_word)
AYTHON
문자열은 immutable 자료형입니다. 즉, 한 글자만 직접 바꿀 수 없습니다. 새 문자열을 만들어야 합니다.
4. 딕셔너리(Dictionary) 슬라이싱
딕셔너리는 리스트처럼 번호 인덱스로 접근하지 않고 key로 접근합니다. 따라서 d[0:2] 같은 직접 슬라이싱은 불가능합니다.
score = {"국어": 90, "수학": 95, "영어": 88, "과학": 92}
# print(score[0:2]) # 오류 발생
딕셔너리는 직접 슬라이싱 불가!
방법 1: key를 리스트로 바꾸어 슬라이싱
score = {"국어": 90, "수학": 95, "영어": 88, "과학": 92}
keys = list(score.keys())
print(keys[:2])
['국어', '수학']
방법 2: items를 리스트로 바꾼 뒤 슬라이싱
score = {"국어": 90, "수학": 95, "영어": 88, "과학": 92}
part = list(score.items())[:2]
print(part)
[('국어', 90), ('수학', 95)]
방법 3: 부분 딕셔너리 만들기
score = {"국어": 90, "수학": 95, "영어": 88, "과학": 92}
part_dict = dict(list(score.items())[:2])
print(part_dict)
{'국어': 90, '수학': 95}
5. 비교 정리
| 자료형 | 슬라이싱 가능? | 예시 | 특징 |
|---|---|---|---|
| 리스트 | 가능 | a[1:4] | 수정 가능 |
| 문자열 | 가능 | s[::-1] | 직접 수정 불가 |
| 딕셔너리 | 직접 불가능 | dict(list(d.items())[:2]) | key 기반 구조 |
6. 실전 예제 코드
예제 1: 리스트에서 짝수 번째 값 추출
data = [1, 2, 3, 4, 5, 6, 7, 8]
print(data[1::2])
[2, 4, 6, 8]
예제 2: 문자열 앞 3글자와 뒤 3글자 추출
text = "Programming"
print(text[:3])
print(text[-3:])
Pro
ing
ing
예제 3: 딕셔너리 앞 3개 항목 추출
student = {"이름":"홍길동", "학년":2, "반":3, "점수":95}
result = dict(list(student.items())[:3])
print(result)
{'이름': '홍길동', '학년': 2, '반': 3}
7. OX 진단평가
a[1:4]는 1번 인덱스부터 4번 인덱스까지 모두 포함한다. X
끝 인덱스 4는 포함하지 않습니다.s[::-1]은 문자열을 거꾸로 만든다. O- 리스트는 슬라이싱으로 일부 값을 바꿀 수 있다. O
- 문자열은
s[0] = 'A'처럼 직접 수정할 수 있다. X - 딕셔너리는
d[0:2]처럼 직접 슬라이싱할 수 있다. X
8. 연습문제
a = [5, 10, 15, 20, 25]에서[10, 15, 20]을 출력하는 코드를 작성하시오.s = "Computer"에서"put"을 출력하는 코드를 작성하시오.s = "Python"을 거꾸로 출력하는 코드를 작성하시오.- 딕셔너리
d = {'a':1, 'b':2, 'c':3}에서 앞 2개 항목만 딕셔너리로 출력하시오.
정답
# 1번
a = [5, 10, 15, 20, 25]
print(a[1:4])
# 2번
s = "Computer"
print(s[3:6])
# 3번
s = "Python"
print(s[::-1])
# 4번
d = {'a':1, 'b':2, 'c':3}
print(dict(list(d.items())[:2]))