이미지 출처: 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
이스케이프 문자는 백슬래시(\)로 시작하며, 뒤따르는 문자와 결합하여 다른 방식으로 해석되게 하는 문자입니다. 이스케이프 문자는 특수 문자를 문자열 내에 포함시키거나, 특별한 조작을 문자열에 적용할 때 사용됩니다.🤔🤔
원화(\)표시는 백슬래시와 같습니다.
'''
\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_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
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'>
정말 다양한 문자열 함수가 있다. 그 중에 몇가지 함수들을 알아보자.. 💻
이론적인 설명만 봤을때는 이해가 잘 안되기에 코드를 보면서 확인해보자.
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
쓰다보니 내용이 많아서 길어졌는데 어렵지는 않으니 반복하면 익숙해질거라고 생각합니다.
다음에는 자료구조중에 리스트를 알아보겠습니다.. 😎