728x90
반응형
문자열
- 파이썬에서 가장 많이 사용되는 자료형 중 하나인 문자열(String)
1. 문자열의 정의와 생성 (Definition and Creation)
- 문자열은 텍스트 표현에 사용되는 순서가 지정되고 변경 불가능한(ordered and immutable) 컬렉션 자료형
- 문자열 생성 방법
- 1. 따옴표 사용: 문자열은 홀따옴표(') 또는 쌍따옴표(")를 사용하여 생성
- 만약 문자열 안에 홀따옴표를 포함해야 한다면, 쌍따옴표로 감싸거나 이스케이프 백슬래시(\)를 사용해야 합니다. 그렇지 않으면 구문 오류(Syntax Error)가 발생
- 2. 삼중 따옴표: 여러 줄에 걸친 문자열(multi-line strings)을 만들거나 코드 내 문서화(documentation)에 사용
- 3. 이스케이프 백슬래시: 줄 바꿈을 원하지 않고 문자열이 다른 줄에서 계속된다는 것을 나타내기 위해 이스케이프 백슬래시를 사용
- 1. 따옴표 사용: 문자열은 홀따옴표(') 또는 쌍따옴표(")를 사용하여 생성
# 따옴표 사용
s1 = 'Hello'
s2 = "World"
print(s1, s2)
## 출력: Hello World
# 작은따옴표가 포함된 문자열 — 큰따옴표로 감싸거나 이스케이프 사용
s3 = "I'm fine"
s4 = 'I\'m fine'
print(s3, s4)
## 출력: I'm fine I'm fine
# 삼중 따옴표 (여러 줄)
multi = """Line1
Line2
Line3"""
print(multi)
## 출력:
# Line1
# Line2
# Line3
# 이스케이프 백슬래시로 줄 이어쓰기
long = "This is a very long string " \
"that continues on the next physical line"
print(long)
## 출력: This is a very long string that continues on the next physical line
2. 요소 접근 및 불변성 이해 (Accessing Elements and Immutability)
- 리스트와 마찬가지로, 문자열 내의 개별 문자(character)나 부분 문자열(substring)에 접근 가능
- 1. 인덱스 사용: 대괄호 안에 인덱스를 지정하여 접근 (인덱스는 0부터 시작)
- 2. 음수 인덱스: 음수 인덱스(-1)는 문자열의 가장 마지막 문자
- 3. 불변성(Immutability): ****문자열은 불변**** 즉, 문자열이 생성된 후에는 변경될 수 없습니다. 특정 인덱스에 접근하여 다른 값으로 문자를 바꾸려고 시도하면 TypeError가 발생
s = "Python"
# 인덱스 접근
print(s[0], s[2])
## 출력: P t
# 음수 인덱스
print(s[-1], s[-2])
## 출력: n o
# 불변성: 변경 시도는 오류
try:
s[0] = 'J'
except TypeError as e:
print("오류:", e)
## 출력: 오류: 'str' object does not support item assignment
3. 슬라이싱을 통한 부분 문자열 접근 (Slicing Substrings)
- 슬라이싱을 사용하면 문자열의 전체 부분 문자열에 접근할 수 있습니다.
- 1. 기본 구문: [시작 인덱스:종료 인덱스]를 사용( 종료 인덱스는 제외 )
- 2. 시작/종료 생략: 시작 인덱스를 지정하지 않으면 처음부터 시작하고, 종료 인덱스를 지정하지 않으면 끝까지 이동
- 3. 스텝 인덱스 (선택 사항): 세 번째 선택적 인수인 스텝 인덱스를 사용 가능
- 기본값은 1스텝 인덱스를 2로 설정하면 매 두 번째 문자만 가져옴
- 4. 문자열 뒤집기 팁: 스텝 인덱스에 -1을 넣으면 문자열을 쉽게 뒤집을 수 있는 유용한 트릭
s = "abcdefghijkl"
print(s[0:4]) # 시작inclusive, 끝exclusive
## 출력: abcd
print(s[:3]) # 처음부터
## 출력: abc
print(s[4:]) # 인덱스4부터 끝까지
## 출력: efghijkl
print(s[::2]) # step=2 (두 칸 건너뛰기)
## 출력: acegik
print(s[::-1]) # 뒤집기 (step = -1)
## 출력: lkjihgfedcba
4. 문자열 연결 및 반복 (Concatenation and Iteration)
- 1. 연결 (+): 두 개 이상의 문자열은 더하기 연산자(+)를 사용하여 간단하게 연결(concatenate) 가능
- 2. 반복 (For-in Loop): for in 루프를 사용하여 문자열을 반복하고 문자열 내의 각 문자를 출력
a = "Hello"
b = "World"
# 연결
c = a + " " + b
print(c)
## 출력: Hello World
# 반복
print("Ha" * 3)
## 출력: HaHaHa
# 문자 반복 처리 (for-in)
for ch in "hey":
print(ch, end=",")
print()
## 출력: h,e,y,
5. 문자열 내 포함 여부 확인 (Checking for Substrings)
- 특정 문자나 부분 문자열이 문자열 내에 포함되어 있는지 확인하려면 if in 구문을 사용
text = "I love Python"
print("love" in text)
## 출력: True
print("Java" in text)
## 출력: False
6. 유용한 문자열 메서드 활용 (Using Useful String Methods)
- 주의: 문자열은 불변하므로, 이러한 메서드들은 원본 문자열을 직접 변경하지 않고 항상 새로운 문자열을 반환
- 따라서 결과를 원본 변수에 다시 할당해야 원하는 동작이 이루어짐
|
메서드
|
설명
|
|
strip()
|
문자열 양 끝의 공백(whitespace)을 제거합니다.
|
|
upper()
|
모든 문자를 대문자로 변환한 새 문자열을 반환합니다.
|
|
lower()
|
모든 문자를 소문자로 변환한 새 문자열을 반환합니다.
|
|
startswith() / endswith()
|
문자열이 특정 문자나 부분 문자열로 시작하거나 끝나는지 확인하여 True 또는 False를 반환합니다.
|
|
find()
|
특정 문자나 부분 문자열이 처음 발견되는 인덱스를 반환합니다. 찾지 못하면 -1을 반환합니다.
|
|
count()
|
특정 문자나 부분 문자열이 발견된 횟수를 셉니다.
|
|
replace()
|
특정 부분 문자열을 새로운 문자열로 대체한 새 문자열을 반환합니다. 대체할 문자열을 찾지 못하면 아무 작업도 수행하지 않고 원본 문자열을 반환합니다.
|
raw = " Hello, PyThOn \n"
print("strip():", raw.strip())
## 출력: strip(): Hello, PyThOn
print("upper():", raw.upper().strip())
## 출력: upper(): HELLO, PYTHON
print("lower():", raw.lower().strip())
## 출력: lower(): hello, python
s = "hello.py"
print("startswith('he'):", s.startswith("he"))
## 출력: startswith('he'): True
print("find('py'):", s.find("py"))
## 출력: find('py'): 6
print("count('l'):", "hello".count("l"))
## 출력: count('l'): 2
print("replace():", "2020-01-01".replace("-", "/"))
## 출력: replace(): 2020/01/01
7. 문자열과 리스트 간의 전환 (Converting Between Strings and Lists)
- 1. 문자열을 리스트로 변환: split()
- split() 메서드를 사용하면 문자열을 리스트로 변환할 수 있으며, 문자열의 각 단어가 리스트의 요소가 됨.
- 구분자(Delimiter): 해당 메소드 default 값은 공백
- 만약 문자열에 쉼표와 같은 다른 구분자가 있다면, 해당 구분자를 split() 메서드의 인수로 전달해야 함.
- 2. 리스트를 문자열로 변환: join() (성능 최적화 필수!)
- 리스트의 요소들을 하나의 문자열로 다시 결합하려면 join() 메서드를 사용
- 구문: [구분자 문자열].join(리스트).
- join() 메서드는 리스트의 모든 요소를 문자열로 연결하고, 각 요소 사이에 지정된 구분자(여기서는 빈 문자열 또는 공백)를 삽입
sentence = "one,two,three"
# split (문자열 → 리스트)
words = sentence.split(",")
print(words)
## 출력: ['one', 'two', 'three']
# join (리스트 → 문자열) — 반복문 + '+' 대신 사용
joined = " | ".join(words)
print(joined)
## 출력: one | two | three
# 성능 주의: 루프에서 계속해서 += 로 문자열을 붙이지 말고 join 사용
성능에 대한 주의 사항:
파이썬에서 문자열을 반복문(for in loop)과 + 연산자(예: my_string + = i)를 사용하여 연결하는 것은 매우 비효율적.
문자열은 불변하기 때문에, 이 연산이 실행될 때마다 새로운 문자열 객체가 메모리에 생성되고 다시 할당되므로 비용이 많이 듬.
**** 따라서 문자열을 연결해야 할 때는 언제나 join() 메서드를 사용하는 것이 훨씬 빠르고 깔끔하며 파이썬다운 코드(cleaner Python code) ****
8단계: 문자열 포매팅 (Formatting Strings)
- 문자열 포매팅은 변수를 문자열에 삽입하는 데 사용
- 1. 구형 스타일: 퍼센트 연산자 (%)
- %s (문자열), %d (정수), %f (부동 소수점) 등의 플레이스홀더를 사용
- 부동 소수점의 경우, 소수점 이하 자릿수를 지정 가능 (예: %.2f).
- 2. .format() 메서드
- 플레이스홀더로 중괄호({})를 사용
- 문자열 뒤에 .format() 메서드를 호출하고 인수로 변수들을 전달하여 플레이스홀더에 넣음
- 여기서도 콜론(:) 뒤에 자릿수 등을 지정 가능 (예: :.2f).
- 3. 최신 스타일: F-Strings (Python 3.6 이상 권장)
- 문자열 앞에 f를 붙이고 중괄호({}) 안에 변수를 직접 넣어 사용
- F-strings는 가장 가독성이 높고(more readable), 간결하며(more concise), 심지어 더 빠릅니다. 파이썬 3.6 이상에서는 이 방법을 사용할 것을 강력히 권장합니다.
- F-strings는 런타임에 평가되므로 중괄호 안에 변수뿐만 아니라 간단한 수학 연산(예: var * 2)도 사용 가능
- 1. 구형 스타일: 퍼센트 연산자 (%)
# 8.1
name = "Max"
age = 28
print("Name: %s, Age: %d" % (name, age))
## 출력: Name: Max, Age: 28
# 8.2
print("Name: {}, Age: {}".format(name, age))
## 출력: Name: Max, Age: 28
print("PI approx: {:.2f}".format(3.14159))
## 출력: PI approx: 3.14
# 8.3 -- 권장
print(f"Name: {name}, Age next year: {age + 1}")
## 출력: Name: Max, Age next year: 29
value = 2/3
print(f"Value: {value:.3f}")
## 출력: Value: 0.667728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
| [파이썬 / 기본] itertools (0) | 2025.10.21 |
|---|---|
| [파이썬 / 기본] collections (0) | 2025.10.20 |
| [파이썬 / 기본] Set {} 집합 (0) | 2025.10.17 |
| [파이썬 / 기본] Dictionary {} (0) | 2025.10.16 |
| [파이썬 / 기본] Tuple () (0) | 2025.10.15 |