반응형
지난 시간에 파이썬(python) 문자열(string) 사용법(use)_리터럴, 출력, 인덱싱, 슬라이싱에 대해 같이 살펴보았습니다 이번 시간은 지난 시간에 이어 파이썬 문자열의 사용법 중에서도 문자열의 불변성, 매소드, 포맷팅에 대해 알아보는 시간을 가지도록 하겠습니다.
문자열 사용법
문자열의 불변성
파이썬의 문자열(str)은 불변(immutable) 자료형입니다. 일부를 수정할 수 없고 대신에 수정된 객체를 새로 만들어야 합니다.
In [1]:
# 슬라이싱을 해도 원래 객체는 변하지 않는다.
a = "Python is Amazing!"
a[2:5]
Out[1]:
'tho'
In [2]:
a
Out[2]:
'Python is Amazing!'
In [3]:
a[::-1]
Out[3]:
'!gnizamA si nohtyP'
In [4]:
a
Out[4]:
'Python is Amazing!'
In [5]:
# 슬라이싱으로 새로운 객체 생성를 생성하려면 다른 이름을 붙여줘야 합니다.
b = a[1:]
b
Out[5]:
'ython is Amazing!'
In [6]:
# a 가 가르키는 객체와 b가 가르키는 객체가 서로 다르므로
#id가 서로 다르다는 것을 확인할 수 있습니다.
print(id(a))
print(id(b))
2376763738032
2376763738592
In [7]:
# 그냥 콜론만 넣으면 전체를 의미합니다.
b = a[:]
b
Out[7]:
'Python is Amazing!'
In [8]:
# a와 b가 가리키는 객체가 동일하므로 id도 동일합니다.
print(id(a))
print(id(b))
2376763738032
2376763738032
In [9]:
# 불변 객체의 일부를 바꿀 수 없습니다.
# ABCDEF
# 012345
a = "ABCDEF"
a[2] = "X"
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [9], in <cell line: 5>()
1 # 불변 객체의 일부를 바꿀 수 없습니다.
2 # ABCDEF
3 # 012345
4 a = "ABCDEF"
----> 5 a[2] = "X"
TypeError: 'str' object does not support item assignment
In [10]:
# 특정 위치의 한 글자만 바꾸고 싶다면? 슬라이싱을 통해 바꾸어야 합니다.
# ABCDEF
# 012345
a = "ABCDEF"
a = a[:2] + "X" + a[3:]
a
# a[3]의 "C"를 "X"로 바꾸었습니다.
Out[10]:
'ABXDEF'
In [1]:
# 축약형 대입 연산자를 사용할 수 있습니다.
a = "헤이 구글!"
print(id(a), a)
a += " 오늘 날씨 어때?"
print(id(a), a)
# 처음 a가 가리키는 객체와
#나중 a가 가르키는 객체가 다르므로 id주소가 바뀝니다.
3183261120752 헤이 구글!
3183261121760 헤이 구글! 오늘 날씨 어때?
In [2]:
a += " 오늘 날씨 굿" * 2
a
Out[2]:
'헤이 구글! 오늘 날씨 어때? 오늘 날씨 굿 오늘 날씨 굿'
문자열의 매써드
문자열 객체는 다양한 메써드들을 이용해서 문자열을 다룰 수 있습니다.
In [3]:
# 대문자로 바꾸기
s = "Just Do It. You can make it"
s.upper()
Out[3]:
'JUST DO IT. YOU CAN MAKE IT'
In [4]:
#문자열(str) 불변형임을 다시 한 번 확인할 수 있습니다.
s
Out[4]:
'Just Do It. You can make it'
In [5]:
# 소문자로 바꾸기
s.lower()
Out[5]:
'just do it. you can make it'
In [6]:
# 한글에는 대소문자 변경이 적용되지 않아요
s = "안녕하세요? 바람이 시원해 기분이 좋아요!"
s.upper()
Out[6]:
'안녕하세요? 바람이 시원해 기분이 좋아요!'
In [7]:
s.lower()
Out[7]:
'안녕하세요? 바람이 시원해 기분이 좋아요!'
In [13]:
# 부울형을 사용할 수 있습니다.
a = "python is Amazing"
a[0].isupper()
Out[13]:
False
In [14]:
a[0].islower()
Out[14]:
True
In [15]:
# 치환을 할 수 있습니다.
a.replace("python", "java")
Out[15]:
'java is Amazing'
In [17]:
#문자열(str) 불변형임을 다시 한 번 확인할 수 있습니다.
a
Out[17]:
'python is Amazing'
In [18]:
# 문자형은 인덱싱이란 메소드를 사용할 수 있습니다.
a.index("A")
Out[18]:
10
In [19]:
# 문자열에 같은 단어가 여러번 사용될 때 인덱스를 찾는 방법입니다.
print(a.index("i"))
print(a.index("i", a.index("i") + 1)) # 두번째 i의 인덱스는 14입니다.
7
14
In [20]:
# a 문자열에 포함된 n 의 갯수를 찾는 방법입니다.
a.count("n")
Out[20]:
2
In [24]:
# "apple"이 txt에 몇 번 나오는지를 세줍니다.
txt = "I love apples, apple are my favorite fruit"
txt.count("apple")
Out[24]:
2
In [21]:
# "ing"를 찾고 ing의 i가 갖는 인덱스
a.find("ing")
Out[21]:
14
In [22]:
#대소문자변경 : 대문자는 소문자로, 소문자는 대문자로 변경하는 방법입니다.
a.swapcase()
Out[22]:
'PYTHON IS aMAZING'
In [23]:
# 각 단어의 첫글자를 대문자로 변경하는 방법입니다.
a.title()
Out[23]:
'Python Is Amazing'
In [25]:
# filename의 마지막이 "png"로 끝나는지 확인합니다.
filename = "blakpink.png"
filename.endswith("png")
Out[25]:
True
In [31]:
# 첫 글자를 대문자로 변경할 수 있습니다.
"programmer".capitalize()
Out[31]:
'Programmer'
In [26]:
# 모든 글자가 숫자인지를 확인합니다. input()과 함께 많이 사용됩니다.
num = "10178651"
num.isdigit()
Out[26]:
True
In [27]:
# z는 zero의 약자입니다. 최소 13글자가 되도록 왼쪽에서부터 0으로 채워줍니다.
# 연속되는 파일들을 저장할때 많이 사용합니다.
num = "10178651"
num.zfill(13)
Out[27]:
'0000010178651'
다양한 기준으로 문자열을 나눌 수 있습니다.
In [9]:
# 공백을 기준으로 문자열을 나눌 수 있습니다.
s = "Hello, World! I love you!"
s.split()
Out[9]:
['Hello,', 'World!', 'I', 'love', 'you!']
In [10]:
# 공백을 기준으로 문자열을 나눈 결과 리스트인 것을 확인할 수 있습니다.
type(s.split())
Out[10]:
list
In [11]:
for i in (s.split()):
print(i)
Hello,
World!
I
love
you!
In [12]:
# l은 리스트구조형이므로 인덱싱 및 슬라이싱이 가능합니다.
l = s.split(",")
l[0]
Out[12]:
'Hello'
In [28]:
# 멤버쉽 연산자 in을 사용하여 문자열에 포한된 단어나 글자를 확인할 수 있습니다.
s = "Hello, World! I love you!"
"you" in s
Out[28]:
True
In [30]:
# 반복문과 함께 사용하는 경우도 많습니다.
s = "Hello, World! I love you!"
for c in s:
print(c, end=' ')
H e l l o , W o r l d ! I l o v e y o u !
더 다양한 메서드들의 사용법은 공식 문서를 참고하세요.
문자열 포매팅(formatting)
문자열을 원하는 형식에 맞출 수 있습니다. 보통 화면에 출력할 때 많이 사용합니다.
- 수동으로 문자열을 만들어서 맞춰주기
- % 연산자를 사용하는 옛날 방식
- 문자열의 format() 메써드
- 형식을 맞춘 문자열 리터럴(파이썬 3.6 이상 F-String)
수동으로 문자열을 만들어서 맞춰주기
In [32]:
# 문자열을 모두 더해서 원하는 형식을 만드는 것은 번거롭습니다.
fruit = "사과"
count = 10
"상자에 " + fruit + "가 " + str(count) + "개 담겨있습니다."
Out[32]:
'상자에 사과가 10개 담겨있습니다.'
In [33]:
# .ljust() 메써드는 모자르는 글자수 만큼 빈칸을 넣어줍니다.
"good luck".ljust(20)
Out[33]:
'good luck '
In [36]:
# 줄을 맞춰주기 위해서 .ljust()를 이용해서 빈칸을 넣어줍니다.
print("Apple".ljust(10), "Windows".ljust(10))
print("App".ljust(10), "Wind".ljust(10))
print("사과".ljust(10), "바나나".ljust(10))
# 한글에서는 이 방식이 제대로 작동하지 않습니다.
Apple Windows
App Wind
사과 바나나
% 연산자를 사용하는 옛날 방식
In [37]:
# 문자열 삽입
print("나는 %s을 해서 성공하겠습니다" % "블로그 글쓰기, 유뷰브, 온라인유통")
나는 블로그 글쓰기, 유뷰브, 온라인유통을 해서 성공하겠습니다
In [38]:
print("원주율은 %s 입니다." % 3.141592) # 문자열로 인식하여 그대로 출력
print("원주율은 %d 입니다." % 3.141592) # 정수로 인식하여 정수부분만 출력
print("원주율은 %.2f 입니다." % 3.141592) # 소수 둘째자리까지 출력
원주율은 3.141592 입니다.
원주율은 3 입니다.
원주율은 3.14 입니다.
In [40]:
# 2 개 이상의 문자를 삽입할 수도 있습니다.
print("나는 %s 와 %s를 해서 디지털 노마드가 될겁니다." %('블로그', '유튜브'))
나는 블로그 와 유튜브를 해서 디지털 노마드가 될겁니다.
문자열의 format() 메서드
In [41]:
# 여러 개를 삽입할때는 인덱스를 사용할 수 있습니다.
print("{} {} {}".format("블로그", "스마트스토어", "유튜브"))
print("{2} {1} {0}".format("블로그", "스마트스토어", "유튜브"))
블로그 스마트스토어 유튜브
유튜브 스마트스토어 블로그
In [42]:
# 인덱스 대신에 이름을 사용할 수도 있습니다.
print("{a} {b} {c}".format(a = "Apple", b = "Banana", c = "Cherry"))
# 이름을 반복해서 사용할 수도 있습니다.
print("{a} {a} {a}".format(a = "Apple", b = "Banana", c = "Cherry"))
Apple Banana Cherry
Apple Apple Apple
In [47]:
print("문자열 포맷을 할 때 정렬시키는 방법입니다.")
print("{0:8} | {1:6}".format("name", "count")) #{a:b} a:는 인덱스를 의미, b는 몇간을 채울 것인지 정하는 것
print("{0:8} | {1:6}".format(35, 5)) # 문자는 왼쪽정렬, 숫자는 오른쪽 정렬입니다.
print("{0:8} | {1:6}".format("banana", 17))
문자열 포맷을 할 때 정렬시키는 방법입니다.
name | count
35 | 5
banana | 17
In [48]:
# <, ^, > : left, center, right (왼쪽 정렬, 가운데 정렬, 오른쪽 정렬)
#한글의 경우 잘 맞지 않습니다. 따로 보정 작업이 필요합니다.
print("{0:<10} | {1:^10} | {2:>10}".format("Left", "Center", "Right"))
print("{0:<10} | {1:^10} | {2:>10}".format("Left", 123, "오른r"))
print("{0:<10} | {1:^10} | {2:>10}".format("Apple", "Banana", "800308"))
Left | Center | Right
Left | 123 | 오른r
Apple | Banana | 800308
In [49]:
# padding character
# padding character(빈곳에 내가 원하는 문자 채우는 방법입니다.)
print("{0:t<10} | {1:*^10} | {2:_>10}".format("Left", "Center", "Right"))
Lefttttttt | **Center** | _____Right
In [50]:
# float precision
# 총 10글자가 되도록 빈칸 추가, 소수점 아래 자리가 4개가 되도록 절삭
print("출력되는 글자는 {0:10.4f}".format(123.456789))
출력되는 글자는 123.4568
In [52]:
my_name = "수학코딩"
print("출력되는 글자는 {0:$>10}".format(my_name))
출력되는 글자는 $$$$$$수학코딩
형식을 맞춘 문자열 리터럴(파이썬 3.6 이상 F-String)
In [53]:
my_name = "수학코딩"
# 리터럴 앞에 f 또는 F를 붙여주고 물결 괄호 안에 표현식(expression)을 넣습니다.
print(f"나는 {my_name} 이다")
나는 수학코딩 이다
In [54]:
# 리터럴 연산도 가능합니다.
print(f"Add:{1 + 2 * 3}")
Add:7
In [55]:
# 변수와 연산자도 문자열 포맷에 사용 가능합니다.
a, b = 1, 2
print(f"{a} 더하기 {b} 는 {a + b}")
1 더하기 2 는 3
In [56]:
# 함수도 사용 가능합니다.
print(f"Result : {pow(-10, 2)}")
Result : 100
In [58]:
my_name = "수학코딩"
# 대괄호 자체를 출력하고 싶은 경우
print(f"나는 {{{my_name}}} 이다")
나는 {수학코딩} 이다
In [59]:
# 백슬래쉬를 직접 출력할 수는 없습니다.
f"Newsline is {\n}"
Input In [59]
f"Newline is {\n}"
^
SyntaxError: f-string expression part cannot include a backslash
In [61]:
# 간접적으로는 사용 가능합니다.
Newsline = "\n"
f"Newsline is {Newsline}"
Out[61]:
'Newsline is \n'
In [62]:
# float 정밀도 조절에서 .format()과 f-string의 사용법이 약간 달라요
num = 3.141592
print(str(num))
print("계산 결과:{0:10.4f}".format(num)) # 0은 빈칸 포함 총 글자수, 4는소수점 이하 넷째자리까지 표현
print(f"계산 결과:{num:{10}.{6}}") # 10은 빈칸 포함 총 글자수, 6은 출력되는 숫자수입니다.
# 요약: f-string에서는 {width}.{precision} 형식으로 float 출력을 조절할 수 있습니다.
3.141592
계산 결과: 3.1416
계산 결과: 3.14159
In [63]:
pi = 3.14
print(str(pi))
print("계산 결과:{0:10.4f}".format(pi)) # 4는소수점 이하, 0으로 패딩해 줌
print(f"계산 결과:{pi:{10}.{6}}") # 10은 빈칸 포함 총 글자수, 6은 출력되는 숫자수, 0으로 패딩해주지 않음
3.14
계산 결과: 3.1400
계산 결과: 3.14
In [64]:
num = 1.23
print("계산 결과:{0:10.4f}".format(num)) # 0은 빈칸 포함 총 글자수, 4는소수점 이하, 0으로 패딩해 줌
print(f"계산 결과:{num:{10}.{6}}") # 10은 빈칸 포함 총 글자수, 6은 출력되는 숫자수, 0으로 패딩해주지 않음
print(f"계산 결과:{num:10.4f}") #f-string을 사용하여 0으로 패딩을 해주는 방법입니다.
계산 결과: 1.2300
계산 결과: 1.23
계산 결과: 1.2300
In [65]:
# f-string에서는 width와 precision에도 변수를 사용할 수 있습니다.
# 사용하기에 따라서는 큰 장점이 될 수도 있습니다.
num = 1.23
width = 10
precision = 6
print(f"계산 결과:{num:{width}.{precision}}")
계산 결과: 1.23
[정리] float 출력 정밀도 조절
format() : 10.4f와 같은 형식 지정자(format specifier)만 사용 가능. 10이나 4 자리에 변수 사용 불가
f-string : 10.4f 같은 형식 지정자와 {10}.{6} 방식 둘 다 사용 가능. 대괄호 안에 변수 사용 가능
이상으로 파이썬 문자열에 대한 포스팅을 마치도록 하겠습니다.
반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
반응형
'수학과 코딩' 카테고리의 다른 글
파이썬(python) 리스트의 사용 방법 총 정리(매소드, 중첩리스트, 반복문) (0) | 2022.07.26 |
---|---|
파이썬(python) 컨테이너(containers)-리시트(list)의 사용 방법(가변성) (0) | 2022.07.26 |
파이썬(python) 문자열(string) 사용법(use)_리터럴(literal), 출력(print), 인덱싱(indexing), 슬라이싱(slicing) (0) | 2022.07.24 |
파이썬 기초 문법 변수의 사용법 (0) | 2022.07.21 |
주피터 노트북에서 작성한 내용 티스토리 옮기는 법(html) (0) | 2022.07.19 |
댓글