파이썬 자료형 (문자형)

윤태영·2023년 11월 5일
0
post-thumbnail

이미지 출처: https://wikidocs.net/192339

저번시간에 이어서 파이썬 자료형중에 문자형을 배워보겠습니다.

문자형 사용법

  • 문자형 중요성
  • 문자형 출력
  • 이스케이프
  • 멀티 라인
  • 문자형 연산
  • 문자형 형 변환
  • 인덱싱
  • 문자열 함수
  • 슬라이싱(많이 쓰인다.!!)

복습하는 개념으로 먼저 문자열 생성하는걸 해보자

문자열 생성 📕

'' or "" or ''' or """ 로 문자열을 정의해준다.

str1 = "I am Python"
str2 = 'Pyhthon'
str3 = """How are you?"""
str4 = '''Thank you!'''
print(type(str1), type(str2), type(str3), type(str4))
>>> <class 'str'> <class 'str'> <class 'str'> <class 'str'> # 모두 문자열로 생성된것 확인!

문자열 길이확인 📕

len() : 공백 포함 문자열의 길이를 확인

str1 = "I am Python"
str2 = 'Pyhthon'
str3 = """How are you?"""
str4 = '''Thank you!'''
print(len(str1), len(str2), len(str3), len(str4))
>>> 11 7 12 10 # str3 같은 경우에는 알파벳 9개와 기호1개 공백 2개 모두 12개인것이 확인 됩니다.

빈 문자열 선언 📕

빈 문자열을 변수에 선언하고 나중에 할당하는 경우도 있다.

str1_t1 = '' # 안에 어떤것도 넣지않고 따옴표를 열고 닫고 하면 빈 문자열로 선언된다.
str2_t2 = str() # str() 오브젝트를 호출해서 빈 문자열을 생성할 수도 있다. (형 변환처럼)
print(type(str1_t1), len(str1_t1))
print(type(str2_t2), len(str2_t2))
>>> <class 'str'> 0 # str_t1, str_t2 모두 문자열이고 길이는 0으로 표시된다.
>>> <class 'str'> 0

이스케이프 문자(escape character) 📕

이스케이프 문자는 백슬래시(\)로 시작하며, 뒤따르는 문자와 결합하여 다른 방식으로 해석되게 하는 문자입니다. 이스케이프 문자는 특수 문자를 문자열 내에 포함시키거나, 특별한 조작을 문자열에 적용할 때 사용됩니다.🤔🤔

원화(\)표시는 백슬래시와 같습니다.
'''
\n: 줄바꿈 (newline)
\r: 캐리지 리턴 (carriage return)
\t: 탭 (tab)
\: 백슬래시 자체를 나타냄
\': 단일 인용부호
\": 이중 인용부호
\b: 백스페이스 (backspace)
\f: 폼 피드 (form feed)
\ooo: 8진수 값 ooo에 해당하는 문자
\xhh: 16진수 값 hh에 해당하는 문자
'''

이스케이프 문자 실습
\' : 단일 인용부호
\" : 다중 인용부호

print("I'm Boy") # 작은따옴표를 안에서 쓰고 싶으면 큰 따옴표로 묶어준다.
>>> I'm Boy
print('I'm boy') - > 오류
>>> SyntaxError: unterminated string literal (detected at line 1)
print('I\'m Boy') # 작은따옴표로 묶어줄때는 \뒤에 써준다. 역슬래시 뒤의 특수 기호는 그대로 표현 
>>> I'm Boy
escape_star1 = "Do you have a \"video games\" ?"
print(escape_star1)
>>>> Do you have a "viedo games" ? # 쌍따옴표로 묶고 안에서 쌍따옴표를 쓰고 싶을때는 백슬래시를 " 앞에 써준다.
escape_star2 ='What\'s on TV ?'
print(escape_star2)
>>>> What's on TV ?

\t: 탭 (tab)
\n: 줄바꿈 (newline)

t_s1 = "Click \t Start!"
t_s2 = "New Line \n Check!"
>>>> Click    Start!  # Tab키만큼 간격이 벌어집니다.
>>>> New Line # 한줄에 모두출력이 되지않고 New Line 다음에 줄이 바뀌어 Check!가 출력된다.
>>>>  Check!

Raw String 출력 📕

  • Raw string은 있는 그대로 출력해준다.
  • C 드라이브의 어떤경로라던지, 맥북이나 윈도우에 어떤 드라이브 경로를 가지고 파일을 복사한다든지 쓸때 사용
  • 소문자 r이 붙어있으면 raw string이구나, 역슬러시,이스케이프 문자를 사용하지 않기위해 변수를 선언했다고 이해하면 된다.
raw_s = r'D:\tpython\test '
print(raw_s)
>>>> D:\tpython\test 
raw_s = r'D:\python\test '
print(raw_s)
>>>> D:\python\test

멀티라인 입력 📕

  • 여러줄에 걸쳐서 한번에 입력한다.
  • \로 끝나면 이 다음에 어떤 변수를 바인딩한다고 판단

예를들어 인터넷에서 긴 텍스트를 가져왔다고 가정해보자.
한줄로 길게 붙여 놓으면 보기 좋지 않기에 줄바꿈을 하면서 보고싶다.

multi_str = """
String
Multi line
Test
"""
print(multi_str)
>>> String
>>> Multi line
>>> Test

기호에 따라 아래와 같이 표시하기 위해서는 \를 붙여준다.
역슬래시로 끝나면 바이썬은 바인딩한다고 판단한다.
바인딩은 변수에 값을 할당한다고 보면 된다.
multi_str이라는 변수에 값을 할당

multi_str = \
"""
String
Multi line
Test
"""
print(multi_str)
>>> String
>>> Multi line
>>> Test

문자열 연산 📕

숫자형 뿐만 아니라 문자열에서도 계산이 가능

str_o1 = 'python'
str_o2 = 'Apple'
str_o3 = 'How are you doing'
str_o4 = 'Seoul Dajeon Busan Jinju'
# 파이썬은 문자열이 들어오면 하나하나를 리스트라고 생각하면 된다. 
# 시퀀스 형은 in 연산자 사용가능하며 자주 사용된다.
print(str_o1 * 3)
print(str_o1 + str_o2)
>>> pythonpythonpython # python을 3번연속출력한다고 생각하면된다.
>>> pythonApple # 문자열 python과 apple을 합쳐서 출력
print('y' in str_o1) # str_o1에 Python 이라는 단어에 y가 있나?
>>> True
print('k' in str_o1)
>>> False
print('P' not in str_o2) # str_o2에 P가 없니? 대소문자 구문하여 'P'는 없으니 True가 출력
>>> True

문자열 형 변환 📕

  • str( ) 안에 정수,실수 불린값을 넣어주면 문자열로 변환된다.
print(str(66), type(str(66))) # 숫자 66을 문자열로 변환한 결과는 "66"이며, 타입은 str
>>> 66 <class 'str'>
print(str(10.1), type(str(10.1))) # 실수 10.1을 문자열로 변환한 결과는 "10.1"이며, 타입은 str
>>> 10.1 <class 'str'>
print(str(True), type(str(True))) # 불린값 True를 문자열로 변환한 결과는 "True"이며, 타입은 str
>>> True <class 'str'>

문자열 함수📕

정말 다양한 문자열 함수가 있다. 그 중에 몇가지 함수들을 알아보자.. 💻

  • capitalize( ) : 괄호안에 문자의 첫글자를 대문자로 변환
  • endswith( ) : 괄호안에있는 문자가 문자열의 마지막문자가 맞는지 확인
  • replace(a,b) : 문자열에서 a인부분을 찾아서 b로 변환
  • sorted( ) : 문자열을 입력받아서 어떤기준에 맞게 정렬해서 리스트 형태로 반환
  • split( ) : 문자열을 지정된 구분자(delimiter)를 기준으로 분할하여 리스트를 반환합니다. 문자열을 여러부분으로 나누는데 유용
  • reversed( ) : 주어진 시퀀스의 요소들을 역순으로 뒤집는 이터레이터를 반환
    reversed() 함수는 반복자(iterator)를 반환하므로, 그 결과를 리스트, 문자열, 튜플 등으로 변환하려면 적절한 타입 변환 함수(list(), str.join(), tuple())를 사용해야 합니다.
  • join( ) : 일련의 문자열을 하나로 결합하는 데 사용

이론적인 설명만 봤을때는 이해가 잘 안되기에 코드를 보면서 확인해보자.

str_o1 = 'python'
str_o2 = 'Apple'
str_o3 = 'How are you doing'
str_o4 = 'Seoul Dajeon Busan Jinju'
print('Capitalize: ', str_o1.capitalize())
>>> Capitalize:  Python # 소문자 p를 대문자로 바꿔서 출력한다.
print('endswith: ', str_o2.endswith('s')) # str_o2의 마지막 문자가 's'인지 확인하고 싶다. 'e'이기에 False가 출력
>>> False
print('replace: ', str_o1.replace('thon', ' Good')) # str_o1에서 'thon'을 찾아서 'Good'로 바꿔서 출력해준다.
>>> replace:  py Good
print("sorted: ", sorted(str_o1)) # 문자열을 입력받아 어떤 기준에 맞게 리스트로 변환하는데 기준은 나중에 정렬부분을 공부할때 자세히 알아보자.
>>> sorted:  ['h', 'n', 'o', 'p', 't', 'y']
print('split: ', str_o4.split(' ')) # str_o4의 공백을 기준으로 분할해서 리스트로 출력
>>> split:  ['Seoul', 'Dajeon', 'Busan', 'Jinju']
print(list(reversed(str_o2)))  리스트, 문자열, 튜플 등의 시퀀스를 뒤집어서 반환
>>> ['e', 'l', 'p', 'p', 'A'] 
print("join str: ", str_o1.join(["I'm ", "!"])) # 여기서는 str_o1이 메소드 구분자로 사용되 었고 I'm 과 '!' 사이에 넣어져서 출력된다.
>>> join str:  I'm python! 

반복(시퀀스) 📕

문자열이 가지고있는 중요한 기능으로 순서가 있는 어떤 배열 형태로 반복문에도 활용가능하다.!
iter 라는 것이있으면 시퀀스에 반복을 할 수 있다고만 알고있어도 된다. 또한 문자열은 시퀀스형이기 때문에 슬라이싱도 가능하다.

im_str = 'Good Boy!'
print(dir(im_str)) # im_str 에서 사용할 수 있는 모든것 나열 , '__iter__' 가 있기에 시퀀스 반복가능
>>> ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__'..]
# 출력
for i in im_str:
    print(i)
>>> G
>>> o
>>> o
>>> d
>>>
>>> B
>>> o
>>> y
>>> !

슬라이싱 📕

마지막으로 중요한 슬라이싱에대해 알아보자!
-슬라이싱(Slicing)은 파이썬에서 시퀀스(리스트, 튜플, 문자열 등)의 일부분을 추출하는 방법으로 슬라이싱을 사용하면 시퀀스의 특정 범위를 지정하여 하위 시퀀스를 얻을 수 있습니다.

기본 문법 : sequence[start:stop:step]
start: 추출을 시작할 인덱스 (이 인덱스를 포함). 생략하면 기본값은 0입니다.
stop: 추출을 끝낼 인덱스 (이 인덱스는 포함하지 않음). 생략하면 기본값은 시퀀스의 끝입니다.
step: 슬라이스에서 요소를 선택하는 간격. 생략하거나 1이면 시퀀스의 모든 요소를 포함합니다. 2이면 한 요소 건너뛰기 등의 간격으로 요소를 선택합니다.

str_s1 = 'Nice Python'
print(len(str_s1))
>>> 11 
print(str_s1[:3]) # 0부터 시작해서 2까지(3은포함x)
>>> Nic
print(str_s1[5:11])
>>> Python
print(str_s1[5:]) # 5번째부터 마지막 끝까지 슬라이싱
>>> Python
print(str_s1[:len(str_s1)]) # str_s1[:11], 끝부분의 길이를 모를때는생략을 하거나, 길이를 넣어주어도 된다
>>> Nice Python
print(str_s1[:len(str_s1)-1])  # str_s1[:10]
>>> Nice Pytho
print(str_s1[1:4:2]) # 1부터 4까지 2칸씩 띄어서 가져온다.
>>> ie
print(str_s1[-5:])
>>> ython
print(str_s1[1:-2])
>>> ice Pyth
print(str_s1[::2]) # 처음부터 끝까지 2칸 간격으로 모두가져온다.
>>> Nc yhn
print(str_s1[::-1]) # 처음과 끝까지 가져오는데 순서는 역으로 출력
>>> nohtyP eciN

쓰다보니 내용이 많아서 길어졌는데 어렵지는 않으니 반복하면 익숙해질거라고 생각합니다.
다음에는 자료구조중에 리스트를 알아보겠습니다.. 😎

출처 : 인프런

profile
ice blue

0개의 댓글