Python 강좌 - 문자열
Python의 문자열에 대해 다루고 있습니다.
2024. 6. 16 최초작성
2024. 6. 17 f-string, format() 메서드, % 연산자 추가
다음 글을 기반으로 작성되었습니다.
https://docs.python.org/ko/3/tutorial/introduction.html
포스트에서 >>>는 파이썬 인터프리터에서 실행했음을 의미합니다.
파이썬의 문자열(string)은 문자, 단어, 문장, 전체 문서 등을 포함하는 일련의 문자 시퀀스(=문자들의 나열)를 의미합니다.
문자열은 큰따옴표(")나 작은따옴표(')를 사용하여 생성할 수 있으며, 여러 줄에 걸친 문자열은 삼중 따옴표(''' 또는 """)로 생성할 수 있습니다.
하나의 작은따옴표로 문자열을 생성합니다.
>>> 'spam eggs'
'spam eggs'
두개의 큰따옴표로 문자열을 생성합니다.
>>> "Paris rabbit got your back :)! Yay!"
'Paris rabbit got your back :)! Yay!'
숫자를 큰따옴표나 작은따옴표로 감싸면 문자열이 됩니다.
>>> '1975'
'1975'
작은따옴표로 생성한 문자열에 작은따옴표를 포함시키려면 작은따옴표 앞에 \를 추가하면 됩니다.
>>> 'doesn\'t'
"doesn't"
큰따옴표로 생성한 문자열에 큰따옴표를 포함시키려면 큰따옴표앞에 \를 추가하면 됩니다.
>>> "\"Yes,\" they said."
'"Yes," they said.'
작은따옴표를 사용하여 생성한 문자열에 큰따옴표를 포함할 수 있습니다.
>>> '"Yes," they said.'
'"Yes," they said.'
큰따옴표를 사용하여 생성한 문자열에 작은따옴표를 포함할 수 있습니다.
>>> "doesn't"
"doesn't"
문자열을 여러 줄에 걸쳐 적을 수 있습니다. 큰따옴표를 세번적은(""") 또는 작은따옴표를 세번적은(''')을 사용하여 문자열을 감싸면 됩니다. 줄 넘김 문자는 문자열에 포함됩니다.
파이썬 쉘에서 줄바꿈 문자가 포함된 문자열을 출력하면 줄바꿈 문자가 \n으로 표시됩니다.
>>> str = """Life
... is
... good"""
>>> str
'Life\nis\ngood'
print문을 사용하여 출력하면 \n대신에 줄바꿈이 출력 됩니다.
>>> print(str)
Life
is
good
\ 뒤에 나오는 문자가 특수 문자로 취급되게 하고 싶지 않다면, 첫 따옴표 앞에 r 을 붙여주면 됩니다. r을 붙인것과 붙이지 않은 것의 출력결과가 다른 것을 볼 수 있습니다.
>>> print('Life\nis\ngood')
Life
is
good
>>> print(r'Life\nis\ngood')
Life\nis\ngood
경로를 의미하는 문자열을 출력하다보면 \n을 줄바꿈 문자로 인식하는 문제가 있습니다.
>>> print('C:\some\name')
C:\some
ame
문자열 앞에 r을 붙여 \n을 줄바꿈 문자로 인식하지 않게 해야 경로가 제대로 출력됩니다.
>>> print(r'C:\some\name')
C:\some\name
경로 마지막에 \가 있는 경우 작은따옴표 앞에 \ 문자가 있는게 되어 에러가 발생합니다.
>>> r'C:\this\will\not\work\'
File "<stdin>", line 1
r'C:\this\will\not\work\'
^
SyntaxError: unterminated string literal (detected at line 1)
이 경우 \ 대신에 \\을 사용하면 문제가 해결됩니다.
>>>'C:\\this\\will\\work\\'
'C:\\this\\will\\work\\'
+연산자를 사용하여 두 개의 문자열을 결합할 수 있습니다.
>>> 'Py' + 'thon'
'Python'
*연산자를 사용하여 문자열을 반복할 수 있습니다.
>>> '='*20
'===================='
두 개의 문자열을 이어서 적으면 하나의 문자열로 결합됩니다.
>>> 'Put several strings within parentheses ' 'to have them joined together.'
'Put several strings within parentheses to have them joined together.'
문자열이 저장된 변수와 문자열을 이어서 적으면 에러가 발생합니다.
>>> prefix = 'Py'
>>> prefix 'thon'
File "<stdin>", line 1
prefix 'thon'
^^^^^^
SyntaxError: invalid syntax
변수에 저장된 문자열과 문자열을 결합하려면 +연산자를 사용해야 합니다.
>>> prefix + 'thon'
'Python'
2개의 변수에 저장된 문자열을 결합하는 경우에도 +연산자를 사용합니다.
>>> a = 'Py'
>>> b = 'thon'
>>> a+b
'Python'
문자열은 인덱스 될 수 있습니다. 첫 번째 문자가 인덱스 0에 대응됩니다. 문자를 위한 별도의 데이터 타입은 없습니다; 단순히 길이가 1인 문자열입니다:
>>> word = 'Python'
인덱스 0에 해당되는 문자는 첫번째 문자인 P입니다.
>>> word[0]
'P'
인덱스 5에 해당하는 문자는 여섯번째 문자인 n입니다. 인덱스가 0부터 시작하기 때문입니다.
>>> word[5] # character in position 5
'n'
인덱스가 음수이면 끝에서부터 셉니다:
-1은 마지막 문자를 의미합니다.
>>> word[-1]
'n'
-2는 뒤에서 두번째 문자를 의미합니다.
>>> word[-2]
'o'
-6은 뒤에서부터 6번째 문자를 의미합니다.
>>> word[-6]
'P'
-0과 0은 똑같이 첫번째 문자를 의미합니다.
>>> word[0]
'P'
>>> word[-0]
'P'
슬라이싱(slicing)을 사용하여 부분 문자열을 얻을 수 있습니다.
인덱스 0부터 인덱스 2 이전까지의 문자를 의미합니다. 범위 끝에 해당하는 인덱스는 포함하지 않음을 주의하세요.
>>> word[0:2]
'Py'
인덱스 2부터 인덱스 5 이전까지의 문자를 의미합니다.
word[2:5]
'tho'
슬라이싱에 사용하는 인덱스를 생략하면 사용되는 기본값이 있습니다. 첫 번째 인덱스를 생략하면 기본값 0을 사용되고, 두 번째 인덱스가 생략되면 기본값으로 슬라이싱 되는 문자열의 길이가 사용됩니다.
인덱스 0부터 인덱스 2 이전까지의 문자를 의미합니다.
>>> word[:2]
'Py'
인덱스 4부터 문자열 마지막에 있는 문자까지를 의미합니다.
word[4:]
'on'
뒤에서 2번째 문자부터 문자열 마지막에 있는 문자까지를 의미합니다.
word[-2:]
'on'
시작 위치의 문자는 항상 포함되는 반면, 종료 위치의 문자는 항상 포함되지 않는 것에 주의하세요. 이 때문에 s[:i] + s[i:] 는 항상 s 와 같아집니다
>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'
너무 큰 값을 인덱스로 사용하면 에러가 발생합니다. 변수 word에 저장된 문자열의 최대 인덱스는 5입니다.
>>> word[42]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
범위를 벗어나는 슬라이스 인덱스는 슬라이싱할 때 에러 없이 처리됩니다:
>>> word[4:42]
'on'
>>> word[42:]
''
파이썬에서 문자열은 변경할 수 없습니다. 그래서 문자열의 인덱스로 참조한 위치에 새로운 값을 대입하려고 하면 에러가 발생합니다.
>>> word[0] = 'J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
word[2:] = 'py'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
문자열을 수정하려면 다음처럼 새로 만들어야 합니다:
>>> 'J' + word[1:]
'Jython'
또는 replace 메소드를 사용할 수 있습니다.
>>> new_word = word.replace('P', 'J')
>>> new_word
'Jython'
내장 함수 len()을 사용하여 문자열의 길이를 얻을 수 있습니다.
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34
문자열에 변수를 포함시키는 몇가지 방법이 있습니다.
1. f-string (Formatted String Literals)
f-string은 Python 3.6에서 도입된 포맷팅 방식으로, 문자열 안에 변수나 표현식을 삽입할 수 있도록 해줍니다. {}안에 변수이름을 추가하는 방식이라 다른 방식에 비해 직관적입니다.
문자열의 원하는 위치에 변수의 값을 출력해줍니다.
name = "Alice" age = 30 print(f"My name is {name} and I am {age} years old.") |
My name is Alice and I am 30 years old.
a + b 처럼 표현식을 사용할 수 있습니다.
a = 5 b = 10 print(f"The sum of {a} and {b} is {a + b}.") |
The sum of 5 and 10 is 15.
소수점 자릿수 지정 : 소수점 세번째 자리까지 출력합니다.
pi = 3.14159265 print(f"Pi rounded to three decimal places: {pi:.3f}") |
Pi rounded to three decimal places: 3.142
정수가 출력되는 자리수를 지정합니다. 5자리 숫자를 출력하는데 값이 없는 자리는 0으로 채워줍니다.
number = 123 print(f"Number with leading zeros: {number:05d}") |
Number with leading zeros: 00123
2. format() 메서드
format 메서드는 Python 3에서 사용되는 방식으로, 중괄호 {}를 사용하여 문자열 안에 변수를 삽입합니다.
문자열의 원하는 위치에 변수의 값을 출력합니다. format에 입력된 순서대로 {} 위치에 변수 값이 출력됩니다.
name = "Alice" age = 30 print("My name is {} and I am {} years old.".format(name, age)) |
My name is Alice and I am 30 years old.
인덱스를 이용하여 변수의 값을 출력합니다. 인덱스 0 자리엔 변수 name의 값이 출력되며 인덱스 1자리엔 변수 age의 값이 출력됩니다.
name = "Alice" age = 30 print("My name is {0} and I am {1} years old. {0} is learning Python.".format(name, age)) |
My name is Alice and I am 30 years old. Alice is learning Python.
f-string 처럼 {}안에 변수이름을 넣는 방식입니다.
name = "Alice" age = 30 print("My name is {name} and I am {age} years old.".format(name=name, age=age)) |
My name is Alice and I am 30 years old.
출력할 소수점 자리수를 지정합니다. 예제에서는 소수점 3번째 자리까지 출력합니다.
pi = 3.14159265 print("Pi rounded to three decimal places: {:.3f}".format(pi)) |
Pi rounded to three decimal places: 3.142
정수가 출력되는 자리수를 지정합니다. 5자리 숫자를 출력하는데 값이 없는 자리는 0으로 채워줍니다.
number = 123 print("Number with leading zeros: {:05d}".format(number)) |
Number with leading zeros: 00123
3. % 연산자
C 언어 스타일의 문자열 포맷팅을 제공합니다. % 뒤에 오는 변수 또는 튜플을 사용하여 문자열의 원하는 위치에 변수를 추가합니다.
문자열의 원하는 위치에 변수의 값을 출력합니다. %s와 %d를 사용하여 각각 문자열과 정수를 출력할 것을 지정해줍니다.
name = "Alice" age = 30 print("My name is %s and I am %d years old." % (name, age)) |
My name is Alice and I am 30 years old.
출력할 소수점 자리수를 지정합니다. 예제에서는 소수점 3번째 자리까지 출력합니다.
pi = 3.14159265 print("Pi rounded to three decimal places: %.3f" % pi) |
Pi rounded to three decimal places: 3.142
정수가 출력되는 자리수를 지정합니다. 5자리 숫자를 출력하는데 값이 없는 자리는 0으로 채워줍니다.
number = 123 print("Number with leading zeros: %05d" % number) |
Number with leading zeros: 00123
딕셔너리를 사용하는 방식입니다.
person = {"name": "Alice", "age": 30} print("My name is %(name)s and I am %(age)d years old." % person) |
My name is Alice and I am 30 years old.
다음 포스트에 작성된 파이썬 강좌 링크들이 모아집니다.
누구나 다하는 파이썬 강좌
https://webnautes.tistory.com/2348