Python에서 문자열을 다루는 다양한 방법을 살펴본다. 공백 제거, 복사, 결합, 검색, 비교, 분할 등 실무에서 자주 활용하는 기술들을 중심으로 설명한다.
1. 양쪽 및 한쪽 공백 제거
strip()은 문자열 양쪽의 지정 문자를 제거하며, 인자 미지정 시 공백이 기본값이다. lstrip()은 왼쪽, rstrip()은 오른쪽만 제거한다.
>>> msg = ' python '
>>> msg.strip()
'python'
>>> msg.lstrip()
'python '
>>> msg.rstrip()
' python'
2. 문자열 할당과 복사
Python의 문자열은 불변 객체이므로 단순 할당 시 동일 객체를 참조한다.
>>> origin = 'data science'
>>> copied = origin
>>> origin is copied
True
3. 문자열 결합 방식
더하기 연산자는 간단하지만, 다수 연결 시 join()이 메모리 효율이 우수하다. join()은 구분자를 앞에 배치하는 점에 유의한다.
# 비효율적인 방식 (루프 내 반복 시)
>>> part_a = 'machine'
>>> part_b = 'learning'
>>> part_a + ' ' + part_b
'machine learning'
# 권장 방식
>>> items = ['2024', '03', '15']
>>> '-'.join(items)
'2024-03-15'
# 구분자로 문자열 분할 대상 연결
>>> connector = '::'
>>> connector.join(['api', 'v2', 'users'])
'api::v2::users'
4. 위치 기반 검색
find()와 index()는 모두 부분 문자열 위치를 반환하나, 실패 시 find()는 -1을, index()는 예외를 발생시킨다.
>>> text = 'artificial intelligence'
>>> text.find('i')
5
>>> text.find('z')
-1
>>> text.index('i')
5
>>> text.index('z')
Traceback (most recent call last):
...
ValueError: substring not found
5. 대소 비교
Python 3에서는 cmp()가 제거되었다. 필요 시 부등호 조합으로 대체한다.
>>> x, y = 100, 80
>>> (x > y) - (x < y)
1
6. 멤버십 확인
>>> phrase = 'neural network'
>>> 'net' in phrase
True
>>> 'deep' not in phrase
True
7. 길이 측정
>>> len('hello world')
11
8. 대소문자 변환
>>> word = 'PyThOn'
>>> word.lower() # 소문자 변환
'python'
>>> word.upper() # 대문자 변환
'PYTHON'
>>> word.swapcase() # 대소문자 반전
'pYtHoN'
>>> 'hello world'.capitalize() # 첫 글자만 대문자
'Hello world'
9. 중앙 정렬 및 채움
>>> title = 'report'
>>> title.center(20, '=')
'=======report======='
10. 출현 횟수 세기
>>> 'mississippi'.count('s')
4
11. 형태 검증
>>> s = 'Python3'
>>> s.startswith('Py') # 접두사 확인
True
>>> s.endswith('3') # 접미사 확인
True
>>> 'abc123'.isalnum() # 영문자 또는 숫자 구성
True
>>> 'hello'.isalpha() # 전체가 알파벳
True
>>> '404'.isdigit() # 전체가 数字
True
>>> ' '.isspace() # 전체가 공백
True
>>> 'lower'.islower() # 소문자 판별
True
>>> 'UPPER'.isupper() # 대문자 판별
True
>>> 'Title Case'.istitle() # 타이틀 케이스
True
12. 슬라이싱 문법
>>> digits = '0123456789'
# 기본 구문: [시작:끝:간격]
>>> digits[0:3] # 0번부터 2번까지
'012'
>>> digits[5:] # 5번부터 끝까지
'56789'
>>> digits[:4] # 처음부터 3번까지
'0123'
>>> digits[-3:] # 뒤에서 3개
'789'
>>> digits[::2] # 2칸 간격
'02468'
>>> digits[::-1] # 역순
'9876543210'
>>> digits[-5:-2] # 뒤에서 5번째부터 뒤에서 3번째 전까지
'567'
문자열은 불변 객체이므로 모든 조작 결과는 새로운 객체를 생성하여 반환한다. 슬라이싱 역시 원본을 변경하지 않고 새 문자열을 만든다.