파이썬 리스트·문자열·딕셔너리 슬라이싱

리스트와 문자열은 인덱스 기반 자료형이므로 슬라이싱이 가능하고, 딕셔너리는 key 기반 자료형이라 직접 슬라이싱은 불가능하지만 변환을 통해 부분 추출할 수 있습니다.

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]

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]

리스트 슬라이싱 수정

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

문자열 뒤집기

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

예제 3: 딕셔너리 앞 3개 항목 추출

student = {"이름":"홍길동", "학년":2, "반":3, "점수":95}

result = dict(list(student.items())[:3])
print(result)
{'이름': '홍길동', '학년': 2, '반': 3}

7. OX 진단평가

  1. a[1:4]는 1번 인덱스부터 4번 인덱스까지 모두 포함한다. X
    끝 인덱스 4는 포함하지 않습니다.
  2. s[::-1]은 문자열을 거꾸로 만든다. O
  3. 리스트는 슬라이싱으로 일부 값을 바꿀 수 있다. O
  4. 문자열은 s[0] = 'A'처럼 직접 수정할 수 있다. X
  5. 딕셔너리는 d[0:2]처럼 직접 슬라이싱할 수 있다. X

8. 연습문제

  1. a = [5, 10, 15, 20, 25]에서 [10, 15, 20]을 출력하는 코드를 작성하시오.
  2. s = "Computer"에서 "put"을 출력하는 코드를 작성하시오.
  3. s = "Python"을 거꾸로 출력하는 코드를 작성하시오.
  4. 딕셔너리 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]))