스터디/파이썬 스터디 강의자료

[2팀/김가림, 최다예] 6차시 파이썬 스터디 - 문자열

다예뻐 2023. 5. 4. 13:51

참고도서 : 데이터 과학을 위한 파이썬 프로그래밍, 최상철

6차시_문자열_강의안.pdf
1.74MB
6차시_문자열_과제.pdf
0.12MB

 

문자열의 개념

문자열은 시퀀스 자료형

시퀀스 자료형 : 데이터를 순차적으로 메모리에 저장하는 형식의 데이터


문자열과 메모리 공간

일반적으로 영문자 한 글자당 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'