파이썬에서 문자열을 다루는 다양한 내장 함수와 메소드들을 정리하고, 실전 예제를 통해 활용법을 알아봅니다.
원본 문자열은 유지하며, 새로운 변환된 문자열을 반환합니다.
str1 = "Apple"
print(str1.upper()) # APPLE
print(str1.lower()) # apple
print(str1) # Apple (원본 유지)
# 대소문자 구분 없이 비교할 때 유용
print('Car'.upper() == 'car'.upper()) # True
a = " Hello, World! "
print(a.strip()) # "Hello, World!"
print(a.upper().strip().replace('H', 'J')) # "JELLO, WORLD!"
🔹 예제 : " 21,300원 "을 정수 21300으로 바꾸기
a = " 21,300원 " result = int(a.replace(",", "").replace("원", "").strip()) print(result) # 21300
split(sep): 구분자를 기준으로 리스트로 분리합니다. (인자가 없으면 공백 기준)
join(iterable): 리스트의 요소들을 특정 구분자로 합쳐 문자열을 만듭니다.
data = "사과,바나나,파인애플"
lst = data.split(",") # ['사과', '바나나', '파인애플']
words = ["A", "B", "C"]
print("--".join(words)) # "A--B--C"
ValueError 발생합니다.find(): 찾으려는 문자열이 없으면 -1반환합니다.
처음 발견된 인덱스만 결과값으로 줍니다.count(): 특정 패턴의 등장 횟수 반환합니다..
str3 = "hello python"
print(str3.find('lo')) # 3
print(str3.find('xx')) # -1
str4 = "aabababbabbaababb"
print(str4.count("ba")) # 5
시작/종료 확인
startswith() : 문자열이 특정 문자열로 시작 여부입니다.
endswith() : 문자열이 특정 문자열로 종료 하는지 여부입니다.
아스키코드
※ 위 함수는 문자열 메소드가 아니라 파이썬 기본내장 함수
ord() : 문자의 코드값입니다.
chr() : 코드의 문자값입니다.
# 시작/종료 예시
url = "[https://www.google.com](https://www.google.com)"
print(url.startswith('http')) # True
print(url.endswith('.com')) # True
# 아스키 코드 변환 (내장 함수)
print(ord("A")) # 65 대문자와 소문자는 32차이가 난다.
print(ord('a')) # 97
print(chr(97)) # 'a'
문자열 내에서 알파벳만 추출하여 빈도수를 딕셔너리로 만듭니다.
방법 1 :문자열 메소드 + dict comprehension 사용
word = "Alice in wonderland"
word = word.lower()
# set을 활용해 중복을 제거한 뒤 count 수행
result = {ch : word.count(ch) for ch in set(word) if ch.isalpha()}
print(result)
출력 결과
# {'a': 2,
# 'c': 1,
# 'd': 2,
# 'e': 2,
# 'i': 2,
# 'l': 2,
# 'n': 3,
# 'o': 1,
# 'r': 1,
# 'w': 1}
--------------------------------------------------------------------------------------
방법 2 : for + dict
data = word.lower()
result = {}
for ch in data:
if 'a' <= ch <= 'z': # 알파벳만
if not result.get(ch): # 첫 등장이면 1
result[ch] = 1
else: # 이미 이전에 한번이라도 등장했다면!
result[ch] += 1
print(f'{ch} -> {result}') # 중간단계 확인
print('🟪', result)
"""
a -> {'a': 1}
l -> {'a': 1, 'l': 1}
i -> {'a': 1, 'l': 1, 'i': 1}
c -> {'a': 1, 'l': 1, 'i': 1, 'c': 1}
e -> {'a': 1, 'l': 1, 'i': 1, 'c': 1, 'e': 1}
-> {'a': 1, 'l': 1, 'i': 1, 'c': 1, 'e': 1}
i -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 1}
n -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 1, 'n': 1}
-> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 1, 'n': 1}
w -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 1, 'n': 1, 'w': 1}
o -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 1, 'n': 1, 'w': 1, 'o': 1}
n -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 1, 'n': 2, 'w': 1, 'o': 1}
d -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 1, 'n': 2, 'w': 1, 'o': 1, 'd': 1}
e -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 2, 'n': 2, 'w': 1, 'o': 1, 'd': 1}
r -> {'a': 1, 'l': 1, 'i': 2, 'c': 1, 'e': 2, 'n': 2, 'w': 1, 'o': 1, 'd': 1, 'r': 1}
l -> {'a': 1, 'l': 2, 'i': 2, 'c': 1, 'e': 2, 'n': 2, 'w': 1, 'o': 1, 'd': 1, 'r': 1}
a -> {'a': 2, 'l': 2, 'i': 2, 'c': 1, 'e': 2, 'n': 2, 'w': 1, 'o': 1, 'd': 1, 'r': 1}
n -> {'a': 2, 'l': 2, 'i': 2, 'c': 1, 'e': 2, 'n': 3, 'w': 1, 'o': 1, 'd': 1, 'r': 1}
d -> {'a': 2, 'l': 2, 'i': 2, 'c': 1, 'e': 2, 'n': 3, 'w': 1, 'o': 1, 'd': 2, 'r': 1}
🟪 {'a': 2, 'l': 2, 'i': 2, 'c': 1, 'e': 2, 'n': 3, 'w': 1, 'o': 1, 'd': 2, 'r': 1}
"""
--------------------------------------------------------------------------------------
방법3 : get() + default값 사용
result = {}
for ch in word.lower():
if ch.isalpha():
result[ch] = result.get(ch, 0) + 1
print(result)
def longestWord(sentence): # "I am a Student"
words = sentence.split() # ["I" "am" "a" "Student"]
max_word = "" # 가장 길이가 긴 단어
for word in words:
if len(word) > len(max_word):
max_word = word
return max_word
data = ["I am a Student", "That elephant is big"]
print([longestWord(d) for d in data])
#출력결과
#['Student', 'elephant']
파이썬의 capitalize() 함수를 사용하지 않고 슬라이싱을 활용하는 방법입니다.
# *******************************
# 문장에서 각 단어 첫글자만 대문자 만들기
# ♣파이썬의 capitalize() 함수는 사용하지 않고 만들기
data = [
"i am a PROGRAMMER", # -> I Am A Programmer
"THAT ELEPHANT IS BIG", # -> That Elephant Is Big
]
def letterCapitalize(sentence): # "i am a PROGRAMMER"
words = sentence.lower().strip().split() #["i" "am" "a" "programmer"]
z = []
for i in words: # i <- "programmer"
i = i[0].upper() + i[1:] # "P" + "rogrammer" => "Programmer"
z.append(i)
return " ".join(z)
[letterCapitalize(d) for d in data]
# ↓ 결과 ['I Am A Programmer', 'That Elephant Is Big']