참고도서 : 데이터 과학을 위한 파이썬 프로그래밍, 최상철
문자열의 개념
문자열은 시퀀스 자료형
시퀀스 자료형 : 데이터를 순차적으로 메모리에 저장하는 형식의 데이터
문자열과 메모리 공간
일반적으로 영문자 한 글자당 1바이트의 메모리 공간을 사용
# 문자열이 저장된 공간의 크기 확인
>>> import sys
>>> print(sys.getsizeof("a"), sys.getsizeof("ab"), sys.getsizeof("abc")) # 특정 변수(또는 값)의 메모리 공간을 측정하는 함수
50 51 52 # 50바이트, 51바이트, 52바이트
코드의 출력 결과는 컴퓨터마다 다를 수 있음
하나의 문자를 저장하기 위해 저장되는 문자 자체를 제외하고도 변수와 관련된 여러 정보 등을 위해 49바이트가 필요한 것
- 컴퓨터는 문자를 직접 인식하지 못함
- 컴퓨터는 문자를 숫자로 변환하여 인식함
- ex) a → 01001011 (변환되어 저장)
- 사람들은 문자를 숫자로 변환하기 위한 규칙을 만듦 (이진수로 변환되는 표준 규칙)
- ex) ASCII, CP949, MS949, UTF-8
- 일반적으로 이 규칙은 1개의 영문자를 1바이트, 즉 2의 8승 정도의 공간에 저장함
이러한 규칙을 이용하여 숫자와 문자를 맵핑하는 것이 바로 운영체제와 인터프리터의 역할 중 하나
이와 같은 형태로 저장됨
문자열의 인덱싱
글자 하나하나가 상대적인 주소를 가짐
이 주소를 사용해 저장된 값을 가져오는 인덱싱을 사용할 수 있음
>>> a = "abcde"
>>> pirnt(a[0], a[4])
a e
>>> print(a[-1], a[-5])
e a
문자열의 슬라이싱
문자열의 주소값을 이용해 문자열의 부분값을 추출해내는 기법
>>> a = "TEAMLAB MOOC, AWESOME Python"
>>> print(a [0:6], " AND ", a[-9:]) # a 변수의 0부터 5까지, -9부터 끝까지
TEAMLA AND ME Python
>>> print(a[:]) # a 변수의 처음부터 끝까지
TEAMLAB MOOC, AWESOME Python
>>> print(a [-50:50])
TEAMLAB MOOC, AWESOME Python # 범위를 넘어갈 경우 자동으로 최대 범위를 지정
>>> print(a[::2], " AND ", a[::-l])
TALBMO,AEOEPto AND nohtyP EMOSEWA ,C00M BALMAET
문자열의 연산
리스트 연산과 같음
>>> a = "TEAM"
>>> b = "LAB"
>>> print(a + " " + b) # 덧셈으로 a와 b 변수 연결하기
TEAM LAB
>>> print(a * 2 + " " + b * 2) # 곱하기로 반복 연산 가
TEAMTEAM LABLAB
>>> if 'A' in a: print(a) # 'A'가 a에 포함되었는지 확인
>>> else:print(b)
TEAM
print() 함수에서 정수형과 문자열을 같이 보여주려고 할 때 실수 발생
문자열과 정수형의 연산으로 인식함
>>> int_value = 2
>>> print("결과는" + int_value)
문자열 함수
문자열을 다룰 때 사용하기 유용한 함수
>>> title = "TEAMLAB X Inflearn"
>>> title.upper() # title 변수를 모두 대문자로 변환
'TEAMLAB X INFLEARN'
>>> title.lower() # title 변수를 모두 소문자로 변환
'teamlab x inflearn'
>>> title = "TEAMLAB X Inflearn"
>>> title.title() # title 변수의 각 단어의 앞글자만 대문자로 변환
'Teamlab X Inflearn'
>>> title.capitalizeO # title 변수의 첫 번째 글자만 대문자로 변환
'Teamlab x inflearn'
>>> title = "TEAMLAB X Inflearn"
>>> title.count("a") # title 변수에 ’a’가 몇 개 있는지 개수 반환
1
>>> title.upper().count("a") # title 변수를 대문자로 만든 후, 'a'가 몇 개 있는지 개수 반환
0
>>> title.isdigit() # title 변수의 문자열이 숫자인지 여부 반환
False
>>> title.startswith("a") # title 변수가 ‘a’로 시작하는지 여부 반환
False
** apostrophe가 들어간 문장이나 줄 바꿈이 있는 문자열 출력
- 작은따옴표가 들어간 문자열 → 큰따옴표로 선언
- 큰따옴표가 들어간 문자열 → 작은따옴표로 선언
>>> a = "It's OK."
- 특수문자 사용
a = "It\\'s OK."
- 큰따옴표나 작은따옴표를 3개로 연결
>>> a = "It\\'s OK."
>>> a = """
It's OK.
I'm Happy.
See you."""
서식 지정 : 다양한 형식에 맞추어 출력 (통화 단위, 세 자리 숫자 단위로 띄어쓰기, % 출력)
% 서식과 format() 함수
>>> print(1,2,3)
1 2 3
>>> print("a" + " " + "b" + " " + "c")
a b c
>>> print("%d %d %d" % (1,2,3)) # 뒤에 있는 숫자와 문자들이 앞의 서식 지정 코드에 대응되어 할당됨
1 2 3
>>> print("{} {} {}".format("a", "b", "c"))
a b c
- 데이터와 출력 형식을 분류할 수 있음
- 시각적으로 훨씬 이해하기 쉽게 코드 작성
- 데이터를 형식에 따라 다르게 표현할 수 있음
서식 지정 기능은 각 변수의 자료형에 맞게 서로 다르게 지정 가능
>>> print('%s %s %s' % ('one', 'two'))
one two
>>> print('%d %d' % (1,2))
1 2
% 서식
💡 %자료형 % (값)
>>> print("I eat %d apples." % 3) # 정수형의 변수
I eat 3 apples.
>>> print("I eat %s apples." % "five") # 문자열의 변수
I eat five apples.
% 서식은 1개 이상의 값도 할당 가능
>>> print("Product : %s, Price per unit: %f." % ("Apple", 5.243))
Product : Apple, Price per unit: 5.243000.
값을 직접 넣지 않고 변수 명을 넣어도 됨
>>> number = 3
>>> day = "three"
>>> print("I ate %d apples. I was sick for %s days." % (number, day))
I ate 3 apples. I was sick for three days.
format() 함수
% 서식과 사용법이 거의 같지만 문자열 형태의 인수를 사용한다 것이 차이점
💡 “{자료형}”.format(인수)
>>> print("I'm {0} years old.".format(20))
I'm 20 years old.
자료형을 바로 지정해주지 않고 순서대로 변수가 할당된다는 장점이 있음
변수의 이름을 사용하거나 변수의 자료형을 따로 지정하여 출력함
>>> age =40; name = 'Sungchul Choi'
>>> print("l'm {0} years old.".format(age))
I'm 40 years old.
>>> print("My name is {0} and {1} years old.".format(name, age))
My name is Sungchul Choi and 40 years old.
>>> print("Product: {0}, Price per unit: {l:.2f}.".format("Apple", 5.243)
Product: Apple, Price per unit: 5.24. # .2f 는 소수점 둘째 자리까지 실수형으로 표현하라
패딩
파이썬의 서식 지정 기능에는 여유 공간을 지정하여 글자 배열을 맞추고 소수점 자릿수르 ㄹ맞추는 기능이 있음
% 서식과 format() 함수 모두 패딩 기능을 제공
% 서식의 패딩
>>> print("%10d" % 12) # 10자리 공간을 확보, 우측 정렬로 12를 출력하라
12
>>> print("%-10d" % 12) # 좌측 정렬
12
>>> print("%10.3f" % 5.94343) # 10자리를 확보하고 소수점 셋째 자리까지 출력
5.943
»> print("%10.2f" % 5.94343) # 10자리를 확보하고 소수점 둘째 자리까지 출력
5.94
>» print("%-10.2f" % 5.94343)
5.94
10자리 안에는 소수점이 포함됨
format() 함수의 패딩
# 10자리의 공간을 확보하고, 우측 정렬로 문자열 ‘Apple’을 출력하라
>>> print("{0:>10s}".format("Apple"))
Apple
# 좌측 정렬
>>> print("{0:<10s}".format("Apple"))
Apple
# 10자리의 공간을 확보하고, 소수점 다섯 번째 자리까지 실수를 출력
>>> "{l:>10.5f}.".format("Apple", 5.243)
' 5.24300.'
>>> "{l:<10.5f}.".format("Apple", 5.243)
'5.24300
💡 네이밍 : 변수명을 서식에 할당할 수 있는 기능
특정 변수명을 사용하여 출력값에 직접 할당
한 번에 출력해야 하는 변수가 많을 때 변수의 순서를 헷갈리지 않고 사용할 수 있음
>>> print("Product: %(name)5s, Price per unit: %(price)5.5f."%
{"name":"Apple", "price":5.243})
Product: Apple, Price per unit: 5.24300.
>>> print("Product: {name:>5s}, Price per unit: {price:5.5f}.".format(name="A
pple", price=5.243))
Product: Apple, Price per unit: 5.24300.
문자열의 분리 : split() 함수
>>> items = 'zero one two three'.split() # 빈칸을 기준으로 문자열 분리하기
>>> print(items)
['zero', 'one', 'two', 'three']
매개변수로 아무것도 입력하지 않으면 빈칸을 기준으로 문자열을 분리하라는 뜻
>>> example = 'python,jqueryJavascript' # ","를 기준으로 문자열 나누기
>>> example.split(",')
['python', 'jquery', 'javascript']
>>> a, b, c = example.split(”,") # 리스트에 있는 각 값을 a, b, c 변수로 언패킹
>>> print(a, b, c)
python jquery javascript
>>> example = 'theteamlab.univ.edu'
>>> subdomain, domain, tld = example.split('.') # "."을 기준으로 문자열 나누기 -> 언패킹
>>> print(subdomain, domain, tld)
theteamlab univ edu
문자열의 결합 : join() 함수
구분자.join(리스트형)
문자열로 구성된 리스트를 합쳐 하나의 문자열로 만들 때 사용
>>> colors = ['red', 'blue', 'green', 'yellow']
>>> result = ''.join(colors)
>>> result
'redbluegreenyellow'
>>> result = ' '.join(colors) # 연결 시, 1칸을 띄고 연결
>>> result
'red blue green yellow'
>>> result = ', '.join(colors) # 연결 시 ","로 연결
>>> result
'red, blue, green, yellow’
>>> result = '-'.join(colors) # 연결 시 "-"로 연
>>> result
'red-blue-green-yellow'
'스터디 > 파이썬 스터디 강의자료' 카테고리의 다른 글
[4팀/김민혜] 7차시 파이썬 스터디 - 자료구조 (0) | 2023.05.09 |
---|---|
[1팀/한규림] 6차시 파이썬 스터디 - 문자열 (0) | 2023.05.04 |
[3팀/이지현] 6차시 파이썬 스터디 - 문자열 (0) | 2023.05.04 |
[1팀/허서원] 6차시 파이썬 스터디 - 문자열 (1) | 2023.05.04 |
[3팀/김경은] 6차시 파이썬 스터디 - 문자열 (0) | 2023.05.02 |