Python. 2

Python String

May 29, 2025

프로그래밍에서 문자열은 정말 자주 마주치는 데이터다.

값을 입력받고, 출력하고, 저장하고, 비교하는 등
거의 모든 단계에서 문자열이 빠지지 않는다.

하지만 한 가지 어려움이 있다.
문자열은 눈에 보이는 그대로 처리되지 않는다는 것이다.
공백, 줄바꿈 문자, 백슬래시처럼 눈에 잘 띄지 않는 요소들이
예상치 못한 결과를 만들어내기도 한다.

그래서 파이썬에서 문자열을 더 똑똑하게 다루는 방법 —
특히 input(), format() 그리고 실무에서 자주 쓰이는 문자열 관련 함수들까지
실무에서도 바로 활용할 수 있도록 정리했다.


1. input 과 format 함수

예시 :

menu = input('주문할 메뉴를 입력하세요 ')
price = int(input('한 잔 가격이 얼마인가요? '))
count = int(input('몇 잔 주문하세요? '))
total = price * count

msg = '{0:s} {1:d}잔 가격은 총 {2:,}입니다.'
print(msg.format(menu, count, total))

#  주문할 메뉴를 입력하세요  라떼
#  한 잔 가격이 얼마인가요?  5000
#  몇 잔 주문하세요? 3
#  라떼 3잔 가격은 총 15,000입니다.

1) 주요 포인트

input() : 사용자의 입력을 문자열로 받아온다.
int() : 입력값이 숫자일 경우, 연산을 위해 정수로 변환한다.
format() : 문자열 안의 {} 자리에 값을 넣는다.
:s, :d, :, 등의 형식 지정자도 함께 사용해 본다.

2) 형식 지정자 정리

형식 의미 예시
:s 문자열 (string) "{:s}".format("지희") ➡️ "지희"
:d 정수 (decimal) "{:d}".format(25) ➡️ "25"
:, 천 단위 쉼표 "{:,}".format(1000000) ➡️ "1,000,000"

2. 딕셔너리와 리스트로 데이터 정리하기

리스트와 딕셔너리를 함께 활용하면 데이터를 구조화하고,
문자열 포맷팅을 통해 출력 형식을 자유롭게 조정할 수 있다.

실무에서 리포트 출력, 콘솔 로그 정리, CSV 저장 전 미리보기 등에 많이 사용된다.

예시:

items = [
    {"name": "아메리카노", "price": 3000, "qty": 2},
    {"name": "카페라떼", "price": 4000, "qty": 1},
    {"name": "샌드위치", "price": 5500, "qty": 3}
]

header_str = '{0:10}{1:10}{2:10}{3:10}'
print(header_str.format('상품명', '가격', '수량', '총액'))
print('-' * 45)

data_str = '{0:10} {1:10,}원 {2:10}잔 {3:10,}원'
for item in items:
    item_name = item['name']
    item_price = item['price']
    item_qty = item['qty']
    total_price = item_price * item_qty

    print(data_str.format(item_name, item_price, item_qty, total_price))

# 상품명      가격        수량        총액
# ---------------------------------------------
# 아메리카노   3,000원        2잔         6,000원
# 카페라떼     4,000원        1잔         4,000원
# 샌드위치     5,500원        3잔        16,500원

1) 출력 포맷 설명

포맷 설명
{0:10} 10칸 너비로 문자열 정렬
{1:10,} 가격에 천 단위 쉼표 추가, 10칸 폭
{2:10} 수량을 10칸에 정렬
{3:10,} 총액도 쉼표 추가하여 10칸 정렬

3. 불변성(Immutable)

문자열은 불변(immutable) 자료형이기 때문에, 문자열의 일부만 바꾸는 것이 불가능하다.

예시 :

str_1 = 'hello'
str_1[0] = 'H'  # ❌ TypeError 발생

1) 해결 방법: 문자열 ➡️ 리스트 ➡️ 다시 문자열

str_2 = list(str_1)      # ['h', 'e', 'l', 'l', 'o']
str_2[0] = 'H'           # ['H', 'e', 'l', 'l', 'o']
result = ''.join(str_2)  # 'Hello'

2) 주요 포인트

list() 로 문자열을 리스트로 변환하면 요소 수정이 가능해진다.
join() 함수로 다시 문자열로 합치면 해결 된다.


4. 중첩 리스트(nested list)

리스트 안에 리스트가 들어있는 구조를 중첩 리스트라고 한다.

예시:

a = ['aaa', 'bbb', 'ccc']
b = [1, 2, 'aaa', 'bbb']
c = [a, b]  # 중첩 리스트

c[0]         # ['aaa', 'bbb', 'ccc']
c[1]         # [1, 2, 'aaa', 'bbb']
c[1][2]      # 'aaa'
c[1][1:-1]   # [2, 'aaa']

슬라이싱도 가능하며, 복잡한 데이터를 다룰 때 매우 유용하다.


5. method vs function

구분 설명
메서드 객체에 소속된 함수. 예: list.count()
함수 독립적으로 동작하는 함수. 예: len()

예시 :

num_list = [1, 3, 5, 7, 9]
print(num_list.count(10))  # 메서드
print(len(num_list))       # 함수

dir(num_list)

#0
#5

#['__add__',
#  '__class__',
#  '__class_getitem__',
#  '__contains__',
#  '__delattr__',
#  '__delitem__',
#  '__dir__',  ...

dir(객체)를 사용하면 객체에 포함된 메서드를 확인할 수 있다.


6. f-string (문자열 포맷팅 최신 문법)

파이썬 3.6부터 도입된 f-string은 문자열을 더 간단하고 직관적으로 포맷팅할 수 있는 방법이다.
기존의 format() 방식보다 훨씬 가독성이 좋고, 실무에서도 가장 많이 쓰인다.

1) 기본 문법

예시 1 :

name = '지희'
age = 25

print(f'안녕하세요, 저는 {name}이고 나이는 {age}살입니다.')

#안녕하세요, 저는 지희이고 나이는 25살입니다.

예시 2 : 입력값으로 간식 삭제하기

msg = f'빼고 싶은 간식이 있다면 번호를 입력하세요 (0~{len(snack_box)-1}): '
user_input = input(msg)

if user_input.strip() == '':
    print("입력이 비어있습니다. 아무것도 삭제하지 않아요.")
else:
    try:
        snack_num = int(user_input)
        if 0 <= snack_num < len(snack_box):
            del snack_box[snack_num]
            print("간식을 삭제했어요:", snack_box)
        else:
            print("유효한 번호를 입력해주세요.")
    except ValueError:
        print("숫자를 입력해주세요.")

2) 주요 포인트

f'문자열 {변수}' 형식으로 변수를 문자열에 바로 넣을 수 있다.
• 중괄호 {} 안에는 계산식도 들어갈 수 있어요. 예: {len(snack_box)-1}
• 문자열 안에 변수나 표현식 결과를 바로 삽입할 수 있어서 가독성이 좋다.

7. format() VS f-string

방식 예시 코드 결과
format() "이름: {}, 나이: {}".format(name, age) "이름: 지희, 나이: 25"
f-string f"이름: {name}, 나이: {age}" "이름: 지희, 나이: 25"

결론: 파이썬 3.6 이상에서는 f-string이 훨씬 간단하고 직관적이다.


8. 실무에서 자주 쓰이는 함수 정리

함수 설명 예시
lower() 모두 소문자로 변환 “Python”.lower() ➡️ “python”
upper() 모두 대문자로 변환 “python”.upper() ➡️ “PYTHON”
capitalize() 첫 글자만 대문자 “hello”.capitalize() ➡️ “Hello”
title() 각 단어의 첫 글자 대문자 “hello world”.title() ➡️ “Hello World”
strip() 앞뒤 공백 제거 ” hello “.strip() ➡️ “hello”
lstrip() 왼쪽 공백 제거 ” hello”.lstrip()
rstrip() 오른쪽 공백 제거 “hello “.rstrip()
replace(old, new) 문자열 바꾸기 “hello”.replace(“l”, “x”) ➡️ “hexxo”
split() 문자열 나누기 (기본: 공백) “a b c”.split() ➡️ [‘a’, ‘b’, ‘c’]
join(list) 리스트를 문자열로 결합 ” “.join([‘a’, ‘b’]) ➡️ “a b”
find(sub) 처음 등장하는 위치 (없으면 -1) “apple”.find(“p”) ➡️ 1
index(sub) 처음 등장하는 위치 (없으면 오류) “apple”.index(“p”) ➡️ 1
count(sub) 부분 문자열 개수 “banana”.count(“a”) ➡️ 3
startswith(sub) 해당 문자열로 시작? “python”.startswith(“py”) ➡️ True
endswith(sub) 해당 문자열로 끝남? “python”.endswith(“on”) ➡️ True
isalnum() 영문자+숫자인가? “abc123”.isalnum() ➡️ True
isalpha() 영문자만인가? “abc”.isalpha() ➡️ True
isdigit() 숫자만인가? “123”.isdigit() ➡️ True
isspace() 공백문자만 있는가? ” \t\n”.isspace() ➡️ True

9. 실무에서 자주 쓰이는 메서드 정리

메서드 사용 예시 설명
append(x) lst.append(4) 맨 뒤에 x 추가
insert(i, x) lst.insert(1, “a”) i 위치에 x 삽입
extend(iter) lst.extend([4, 5]) 리스트에 여러 값 추가
remove(x) lst.remove(“a”) x와 일치하는 첫 항목 삭제
pop() lst.pop() 마지막 항목 제거하고 반환
pop(i) lst.pop(0) i번째 항목 제거하고 반환
clear() lst.clear() 리스트 전체 비우기
index(x) lst.index(“a”) x의 위치(인덱스) 반환
count(x) lst.count(“a”) x의 개수 세기
sort() lst.sort() 오름차순 정렬 (원본 변경)
sort(reverse=True) lst.sort(reverse=True) 내림차순 정렬
reverse() lst.reverse() 항목 순서 뒤집기
copy() lst2 = lst.copy() 리스트 복사 (원본 변경)
deepcopy() lst2 = lst.deepcopy() 리스트 깊은 복사 (원본 동일)

오늘을 마치며

오늘은 파이썬에서 문자열을 다루는 다양한 방법을 배웠다.

사용자 입력부터 문자열 포맷팅, 리스트와 딕셔너리로 데이터를 구조화하는 방법,
그리고 format()f-string의 차이까지 —
실무에서도 바로 활용할 수 있는 실습 위주로 정리했다.

코드를 더 예쁘고 직관적으로 만들 수 있는 좋은 도구를 알게 되었고,
f-string처럼 지금은 작고 사소한 코드 한 줄처럼 보여도
이런 경험들이 쌓이면,

“읽기 쉬운 코드, 유지보수하기 좋은 코드”를
짤 수 있는 분석가가 될 수 있을 거라 생각한다.