[Python] 11. 문자열(String Type)

Wonder_Land🛕·2022년 6월 25일
0
post-thumbnail
  1. 문자열 연산
  2. 문자열 함수
  3. Q&A
  4. 마치며

우리 인간이 볼 수 있는 대부분 정보들은 '문자열'로 이루어져 있습니다.

따라서 이 문자열을 다루는 연산과 함수는 굉장히 중요한데요,
컴퓨터 안에 있는 워드, 웹에서 수집한 자료들로부터 필요한 데이터를 얻기 위해 '전처리 과정'이 필요합니다.

'전처리 과정'에서는 불필요한 데이터를 삭제하거나 필요한 정보를 추출하기 위해,
문자열 찾기, 조작, 치환 등을 활용합니다.


1. 문자열 연산

문자열이 제공하는 연산으로는 다음이 있는데요, 순서대로 살펴볼게요.

  1. 문자열의 연결
  2. 문자열의 반복
  3. 문자의 선택
  4. 문자열의 범위 선택

1) 문자열의 연결

(1) + 연산자 이용

문자열 연결 연산자 +를 통해,
문자열을 연결할 수 있습니다.

message = "Hello"
name = "Wonder Land"

text = message + ", " + name	# '+' 사용
print(text)

[Result]
Hello, Wonder Land

(2) 문자열 포맷팅(String Formatting) 이용

문자열 포맷팅(String Formatting)을 통해,
문자열을 연결할 수 있습니다.

  1. % formatting 방식
  2. format() 함수
  3. f - string 방식

을 이용할 수 있겠네요.

message = "Hello"
name = "Wonder Land"

text1 = "%s, %s" % (message, name)  # % Formatting
text2 = "{0}, {1}".format(message, name)    # format()
text3 = f"{message}, {name}"    # f - string

print(text1)
print(text2)
print(text3)

[Result]
Hello, Wonder Land
Hello, Wonder Land
Hello, Wonder Land


2) 문자열의 반복

문자열 반복 연산자 *를 통해,
문자열을 반복할 수 있습니다.

message = "Hello "

print(message * 3) # '*' 사용

[Result]
Hello Hello Hello


3) 문자의 선택

(1) index 이용

text = "Hello!"

for i in range(len(text)):
    print(f"text[{i}] : {text[i]}")

[Result]
text[0] : H
text[1] : e
text[2] : l
text[3] : l
text[4] : o
text[5] : !

(2) 상대적인 index 이용

상대적인 index를 이용하면,
문자열을 거꾸로 출력할 수도 있습니다.

text = "Hello!"

for i in range(len(text) - 1, -1, -1):
    print(f"text[{i}] : {text[i]}")

[Result]
text[5] : !
text[4] : o
text[3] : l
text[2] : l
text[1] : e
text[0] : H


4) 문자열의 범위 선택

text = "Hello, Wonder Land!"

start, end = map(int, input().split())

print(text[start : end + 1])

[Input]
2 12
[Result]
llo, Wonder

이 때, 범위는 end - 1까지만 포함하기 때문에
출력을 할 때는 end + 1로 해야
end까지 출력합니다.


2. 문자열 함수

문자열에서는 다양한 기능을 하는 함수를 제공하고 있습니다.

1, 문자열 출현 횟수 확인
2. 문자열의 길이
3. 문자열 찾기
4. 문자열의 삽입
5. 대소문자 바꾸기
6. 공백 제거
7. 문자열 교체
8. 문자열 자르기
9. 문자열 구성 확인

하나씩 살펴볼까요?

1) count() : 문자열 출현 횟수 확인

count()함수를 통해,
문자열의 출현 횟수를 알 수 있습니다.

text = "Hello, Hello, Wonder Land!"
word = input()

# 'count()' 이용
print(f"\"{text}\"에서 {word}{text.count(word)}번 있습니다")	

[Input]
Hello
[Result]
"Hello, Hello, Wonder Land!"에서 Hello는 2번 있습니다


2) len() : 문자열의 길이

len()함수를 통해,
문자열의 길이를 알 수 있습니다.

text = "Hello, Wonder Land!"

# 'len()' 이용
print(f"\"{text}\"의 길이는 {len(text)}입니다")

[Result]
"Hello, Wonder Land!"의 길이는 19입니다


3) 문자열 찾기

(1) find() 함수

find()함수를 통해,
원하는 문자열을 찾을 수 있습니다.

find()함수는
문자열의 찾을 경우, 시작 index를 반환하고
못 찾을 경우, -1을 반환합니다.

text = "Hello, Wonder Land!"
word = input()

# 찾았을 경우
if text.find(word) > 0 :    
    print(f"\"{word}\"은 {text.find(word)}에 있습니다.")
# 못 찾았을 경우
else :	
    print(f"\"{word}\"은 없습니다.")

[Input]
Wonder
[Result]
"Wonder"은 7에 있습니다.

[Input]
Alice
[Result]
"Alice"은 없습니다.

(2) rfind() 함수

find()함수를 통해,
원하는 문자열을 찾을 수 있습니다.

rfind()함수는 find()함수와 마찬가지로,
문자열의 찾을 경우, 시작 index를 반환하고
못 찾을 경우, -1을 반환합니다.

하지만 find()함수와는 다르게,
원본 문자열의 맨 뒤에서부터 찾기 시작합니다.

text = "Hello, Wonder Land!"
word = input()

# 찾았을 경우
if text.find(word) > 0 :    
    print(f"\"{word}\"은 {text.find(word)}에 있습니다.")
# 못 찾았을 경우
else :	
    print(f"\"{word}\"은 없습니다.")

[Input]
Wonder
[Result]
"Wonder"은 7에 있습니다.

[Input]
Alice
[Result]
"Alice"은 없습니다.

(3) index() 함수

find()함수를 통해,
원하는 문자열을 찾을 수 있습니다.

index()함수는
문자열의 찾을 경우, 시작 index를 반환하고
못 찾을 경우, ValueError를 반환합니다.
(find()는 못 찾으면, -1을 반환했죠?)

text = "Hello, Wonder Land!"
word = input()

try:    # 찾았을 경우
    print(f"\"{word}\"은 {text.index(word)}에 있습니다.")
except ValueError:  # 못 찾았을 경우
    print(f"\"{word}\"은 없습니다.")

[Input]
Wonder
[Result]
"Wonder"은 7에 있습니다.

[Input]
Alice
[Result]
"Alice"은 없습니다.


4) join() : 문자열의 삽입

(구분).join(문자열)
구분문자열을 원래의 문자열 각 항목 사이에 삽입합니다.

text = "Hello, Wonder Land!"

print(f"{'|'.join(text)}")	# '|' 삽입

[Result]
H|e|l|l|o|,| |W|o|n|d|e|r| |L|a|n|d|!

참고로, join()함수를 이용하면,
다른 iterable type(List, Tuple, Set, ...)을 구분문자열을 포함한 문자열로 변환할 수도 있습니다.

tpl = ('H', 'e', 'l', 'l', 'o') # Tuple
lst = ['H', 'e', 'l', 'l', 'o'] # List
s = {'H', 'e', 'l', 'l', 'o'}   # Set

print(f"{' '.join(tpl)}")   # Tuple -> String with " "(space)
print(f"{' '.join(lst)}")   # List -> String with " "(space)
print(f"{' '.join(s)}")     # Set -> String with " "(space)

[Result]
H e l l o
H e l l o
H o e l

Set을 String으로 변환하는 과정에서,

  1. 중복되는 문자는 당연히 한 번만 사용하게 됩니다.
    (왜냐 하면, Set은 중복을 허용하지 않기 때문이죠 😉)
  2. 순서(Sequence)의 개념이 없습니다.

을 알 수 있습니다.


5) 대소문자 바꾸기

(1) capitalize() 함수

첫번쨰 문자대문자로 변환한 새로운 문자열을 반환합니다.

text = "hello, Wonder Land!"

print(text.capitalize())

[Result]
Hello, wonder land!

위의 예시에서 보듯이,
문자열의 첫번째 문자 h가 대문자 H로 바꼈네요!


(2) upper() 함수

모든 문자대문자로 변환한 새로운 문자열 반환을 반환합니다.

text = "hello, Wonder Land!"

print(text.upper())

[Result]
HELLO, WONDER LAND!

위의 예시에서 보듯이,
문자열의 모든 문자 대문자로 바꼈네요!


(3) lower() 함수

모든 문자소문자로 변환한 새로운 문자열 반환을 반환합니다.

text = "hello, Wonder Land!"

print(text.capitalize())

[Result]
hello, wonder land!

위의 예시에서 보듯이,
문자열의 모든 문자 소문자로 바꼈네요!


6) 공백 제거

(1) strip() 함수

strip() 함수는,
문자열의 양쪽 공백을 제거합니다.

text = "    H el lo    "

print(f"\"{text.strip()}\"")

[Result]
"H el lo"

(2) lstrip() 함수

lstrip() 함수는,
문자열의 왼쪽 공백을 제거합니다.

text = "    H el lo    "

print(f"\"{text.lstrip()}\"")

[Result]
"H el lo "

(3) rstrip() 함수

rstrip() 함수는,
문자열의 오른쪽 공백을 제거합니다.

text = "    H el lo    "

print(f"\"{text.rstrip()}\"")

[Result]
" H el lo"


7) replace() : 문자열 교체

replace()함수를 통해,
원래 문자열을 원하는 문자열로 교체할 수 있습니다.

(문자열).replace((원래 문자열), (바꿀 문자열), (바꿀 횟수))

(바꿀 횟수)생략하면, 해당하는 모든 문자열을 바꾸고,
count = 1처럼 주게 되면, 해당하는 문자열을 1번만 바꿉니다.

text = "Hello Wonder Land!"

# "Hello"를 "Bye"로 바꿈
print(text.replace("Hello", "Bye"))

[Result]
Bye Wonder Land!


8) split() : 문자열 자르기

split()함수는,
특정 문자를 기준으로 원래의 문자열을 잘라
이를 element로 갖는 List를 생성합니다.

text = "Hello Wonder Land!"

# " "(space)를 기준으로 자르기
print(text.split(" "))

[Result]
['Hello', 'Wonder', 'Land!']

이처럼, split()함수는 List를 반환합니다.


9) 문자열 구성 확인

문자열의 구성을 확인을 통해,
다양한 유효성 검사를 할 수 있습니다.

(1) isdigit() 함수

isdigit()함수는,
해당 문자열이 숫자로만 이루어진 문자열인지 확인합니다.

이 때, 공백이 있으면 Fasle를 반환합니다.

text1 = "10203040"
print(text1.isdigit())

# 공백을 포함한 숫자로 이루어진 문자열
text2 = "10 20 30 40"
print(text2.isdigit())

[Result]
True
False

(2) isalpha() 함수

isalpha()함수는,
해당 문자열이 알파벳으로만 이루어진 문자열인지 확인합니다.

이 때, 공백이 있으면 Fasle를 반환합니다.

text1 = "HelloWonderLand"
print(text1.isalpha())

# String with space
text2 = "Hello Wonder Land"
print(text2.isdigit())

[Result]
True
False

문자열 구성 확인을 하는 함수는
isalnum(), isnumeric(), isascii() 등등 많이 있습니다.
(저는 자주 쓰는 두 기능만 기록했습니다! 😉)


3. Q&A

-


4. 마치며

오늘은 문자열에 대해 알아봤습니다.

사실 대부분의 데이터는 문자열로 이루어져 있기 때문에, 문자열은 정말 자주 접하는 자료형이죠.

그만큼 많이 사용하기 때문에,
여러 가지 방식으로 다루어야 하는 경우가 많은데,
그 때마다 정말 당혹스럽습니다...😢

이번 기회에 문자열에 대해 정리해보면서
제대로 공부해봐야겠네요! 😉

[Reference] : 위 글은 다음 내용을 참고, 인용하여 만들어졌습니다.

  • 전반적 내용 : 삼성 SW Expert Academy
profile
아무것도 모르는 컴공 학생의 Wonder_Land

0개의 댓글