한양과학기술고등학교

에듀테크 프로젝트 대시보드

문자열 기초

str slicing indexing immutable escape

문자열은 유니코드 문자의 불변 시퀀스입니다. 인덱싱·슬라이싱 규칙은 리스트와 같습니다.

1. 문자열 리터럴

a = "큰따옴표"
b = '작은따옴표'          # 둘은 동등
c = "그는 \"안녕\"이라 했다"   # 이스케이프
d = '그는 "안녕"이라 했다'      # 다른 따옴표로 감싸면 편함

multi = """여러 줄
문자열"""

path = r"C:\Users\name"    # raw 문자열: \ 를 그대로

# 인접한 리터럴은 자동 연결
msg = ("긴 문장을 "
       "여러 줄로 나눠 쓰기")
이스케이프의미
\n줄바꿈
\t탭
\\역슬래시
\" \'따옴표
\u00c0유니코드 코드포인트

2. 인덱싱과 슬라이싱

s = "PYTHON"
#    012345
#   -654321

s[0]      # => 'P'
s[-1]     # => 'N'
s[1:4]    # => 'YTH'   (끝 인덱스 미포함)
s[:3]     # => 'PYT'
s[3:]     # => 'HON'
s[::2]    # => 'Pto'... 실제 => 'PTO'  (스텝 2)
s[::-1]   # => 'NOHTYP'  (뒤집기 관용구)
len(s)    # => 6
슬라이스 s[start:stop:step]
  • 범위를 벗어나도 에러 없음 — "abc"[1:99] => 'bc'
  • step 이 음수면 역방향
  • 슬라이스는 새 문자열을 만든다 (원본 불변)

3. 문자열은 불변

s = "hello"
# s[0] = "H"          # TypeError
s = "H" + s[1:]       # => 'Hello'  (새 객체)

# 문자 단위 조작은 리스트로 변환 후
chars = list("hello")
chars[0] = "H"
s = "".join(chars)

4. 연결·반복·포함

"ab" + "cd"        # => 'abcd'
"=" * 20           # => '===================='
"y" in "python"    # => True
"z" not in "python"  # => True

# 반복 연결은 join 이 훨씬 빠름 (O(n) vs O(n^2))
parts = ["a", "b", "c"]
"-".join(parts)    # => 'a-b-c'   (권장)
루프 안 += 연결 피하기
  • for w in words: text += w 는 매번 새 문자열 생성 → 느림
  • 리스트에 모아 두고 마지막에 "".join(buf)

5. 순회와 유용한 내장함수

for ch in "abc":
    print(ch)          # a / b / c

ord("A")   # => 65     (문자 → 코드포인트)
chr(0xAC00)  # => '가'  (코드포인트 → 문자)
"Hello".encode("utf-8")   # => b'Hello'  (bytes)
b"Hello".decode("utf-8")  # => 'Hello'
"단순함이 복잡함보다 낫다 (Simple is better than complex)"