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

[1팀/한규림] 6차시 파이썬 스터디 - 문자열

onegyul 2023. 5. 4. 16:16

6주차_문자열_강의안.pdf
1.80MB
6주차_문자열_과제.pdf
0.13MB

6주차 주제는 문자열입니다.

1. 문자열의 이해

1) 문자열의 개념

  • 시퀀스 자료형 : 리스트와 같이 데이터를 순차적으로 메모리에 저장하는 형식의 데이터
  • 문자열(string)은 애플리케이션을 만들거나 데이터를 분석할 때 매우 중요하게 다뤄지는 자료형 중 하나로, 시퀀스 자료형(sequence data type)이다.

2) 문자열과 메모리 공간

  • 문자열을 저장하기 위해서는 영문자 한 글자당 1바이트의 메모리 공간을 사용함
    1바이트 = 8비트 = 2의 8승인 256까지의 숫자를 저장할 수 있음.
import sys
print(sys.getsizeof("a"), sys.getsizeof("ab"), sys.getsizeof("abc"))

# 출력 결과
50 51 52
  • sys.getsizeof( ) : 특정 변수(또는 값)의 메모리 공간을 측정하는 함수
  • a, ab, abc의 메모리 크기가 각각 50, 51, 52바이트라는 뜻임. 하나의 문자를 저장하기 위해, 저장되는 문자 자체를 제외하고도 변수의 저장 위치 등을 위해 49바이트가 필요하다는 것임.
  • 컴퓨터는 문자를 직접 인식하지 않는다. 텍스트로 인식하는 것이 아닌, 이진수로 변환하여 저장한다. 문자가 1바이트라고 하니, 2의 8승의 공간에 문자에 대한 정보를 저장한다. ex) 우리 눈에는 a라고 보이지만 컴퓨터 메모리와 CPU에는 01001011과 같은 숫자들이 처리된다.
  • 문자를 처리하기 위해 이진수로 변환되는 표준 규칙이 존재함. 대표적으로 ASCII (American Standard Code for Information Interchange) 가 있음. 윈도에서 한글 처리를 위해 많이 쓰는 CP949, MS949, UTF-8 등이 있음. 이러한 규칙을 인코딩(encoding)이라고 함.
  • 다음 규칙을 이용하여 숫자와 문자를 맵핑하는 것이 운영체제와 인터프리터의 역할 중 하나이다.
    1. 컴퓨터는 문자를 직접 인식하지 못한다.
    2. 컴퓨터는 문자를 숫자로 변환하여 인식한다.
    3. 사람들은 문자를 숫자로 변환하기 위한 규칙을 만들었다.
    4. 일반적으로 이 규칙은 1개의 영문자를 1바이트, 즉 2의 8승 정도의 공간에 저장한다.

3) 문자열의 인덱싱

문자열은 시퀀스 자료형이다. 시퀀스 자료형은 리스트와 특징이 거의 같은 자료형이다.

따라서 문자열의 특징 중 하나가 인덱싱(indexing)이다.

a = "abcde"
print(a[0],a[4])
print(a[-1], a[-5])

#출력 결과
a e
e a

4) 문자열의 슬라이싱

슬라이싱(slicing) : 문자열 주소값을 이용해 문자열의 부분값을 추출해내는 기법

a = "TEAMLAB MOOC, AWESOME Python"
print(a[0:6], "AND", a[-9:])
print(a[:])
print(a[-50:50])
print(a[::2], "AND", a[::-1])

#출력결과
TEAMLA AND ME Python
TEAMLAB MOOC, AWESOME Python
TEAMLAB MOOC, AWESOME Python
TALBMO,AEOEPto AND nohtyP EMOSEWA ,COOM BALMAET

5) 문자열의 연산

문자열도 일반적인 변수와 마찬가지로 연산이 가능하다. 기본적으로 문자열 연산은 리스트 연산과 같다.

a = "TEAM"
b = "LAB"
print(a + "" + b)  # 덧셈으로 a와 b 변수 연결하기
print(a * 2 + "" + b * 2)  # 곱하기로 반복 연산 가능
if 'A' in a: print(a)  # 'A'가 a에 포함되었는지 확인
		else: print(b)

# 출력결과
TEAM LAB
TEAMTEAM LABLAB
TEAM

덧셈 연산에서 모든 변수가 문자열일 경우 텍스트 붙이기(concatenate)가 이루어진다.

문자형과 정수형의 연산은 덧셈 연산이 실행되지 않는다. (다음 코드 예시를 살펴보자.)

int_value = 2
print("결과는" + int_value) # 실행되지 않음

6) 문자열 함수

문자열 함수는 문자열을 다룰 때 사용하기 유용한 함수이다.

몇가지 주요 문자열 함수에 대해 알아보자.

  • upper( ) 함수 : 문자열을 대문자로 변환하는 함수
  • lower( ) 함수 : 문자열을 소문자로 변환하는 함수
title = "TEAMLAB X Inflearn"
print(title.upper())  # title 변수를 모두 대문자로 변환
print(title.lower())  # title 변수를 모두 소문자로 변환

# 출력결과
'TEAMLAB X INFLEARN'
'teamlab x inflearn'
  • title( ) 함수 : 각 단어의 앞글자만 대문자로 바꾸는 함수
  • capitalize( ) 함수 : 첫 번째 글자만 대문자로 바꾸는 함수
title = "TEAMLAB X Inflearn"
print(title.title())  # title 변수의 각 단어의 앞글자만 대문자로 변환
print(title.capitalize())  # title 변수의 첫 번째 글자만 대문자로 변환

# 출력결과
'Teamlab X Inflearn'
'Teamlab x inflearn'
  • count( ) 함수 : 해당 문자열에서 특정 문자가 포함된 갯수를 반환
  • isdigit( ) 함수 : 해당 문자열이 숫자인지 여부 반환
  • startswith( ) 함수 : 해당 문자열이 문자열로 시작하는지 여부 반환
title = "TEAMLAB X Inflearn"
print(title.count("a"))  # title 변수에 'a'가 몇 개 있는지 개수 반환
print(title.upper().count("a"))  # title 변수를 upper() 후, 'a'가 몇 개 있는지 개수 반환
print(title.isdigit())  # title 변수의 문자열이 숫자인지 여부 반환
print(title.startswith("a"))  # title 변수가 'a'로 시작하는지 여부 반환

# 출력결과
1
0
False
False

 

 

실습 : 단어 카운팅 진행

The Beatles <Yesterday> 노래 가사에서 ‘Yesterday’라는 단어가 몇 번 나오는지 맞히는 단어 카운팅 프로그램을 작성합니다.

2. 문자열 서식 지정

1) 서식 지정의 개념

print() 함수는 기본적으로 변수 또는 값을 콤마로 띄어쓰기하여 출력한다. 하지만 특정 형식에 맞춰 결과를 출력해야 하는 경우도 발생하는데, 이를 서식 지정(formatting)이라고 한다.

2) % 서식과 format( ) 함수

print(1, 2, 3)
print("a" + "" + "b" + "" + "c")
print("%d %d %d" % (1, 2, 3))
print("{} {} {}".format("a","b","c"))

# 출력결과
1 2 3
a b c
1 2 3
a b c

 

print('%s %s' % ('one','two'))
print('%d %d' % (1, 2))

# 출력결과
one two
1 2

2.1 % 서식

출력 양식 : ‘%자료형 % (값)’

print("I eat %d apples." % 3)
print("I eat %s apples." % "five")

# 출력결과
I eat 3 apples.
I eat five apples.

%d는 정수형의 변수를, %s는 문자열의 변수를 할당받을 수 있다.

변수의 자료형에 따라 다양하게 설정할 수 있다.

% 서식은 1개 이상의 값도 할당할 수 있다. % 뒤에 괄호를 넣어 그 안에 순서대로 값을 입력하면 된다.

print("Product: %s, Price per unit: %f." % ("Apple", 5.243))

# 출력결과
Product: Apple, Price per unit: 5.243000.

값을 직접 없이 않고 number, day와 같은 변수명을 넣어도 문제없이 실행된다.

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.

2.2 format( ) 함수

출력 양식 : “{자료형}”.format(인수)

print("I'm {0} years old.".format(20))

# 출력결과
I'm 20 years old.

format( ) 함수는 % 서식처럼 변수의 이름을 사용하거나 변수의 자료형을 따로 지정하여 출력한다.

age = 22; name = 'Gyulim'
print("I'm {0} years old.".format(age))
print("My name is {0} and {1} years old.".format(name, age))
print("Product: {0}, Price per unit: {1:.2f}.".format("Apple", 5.243))

# 출력결과
I'm 22 years old.
My name is Gyulim and 22 years old.
Product: Apple, Price per unit: 5.24.

3) 패딩

파이썬의 서식 지정 기능에는 여유 공간을 지정하여 글자 배열을 맞추고 소수점 자릿수를 맞추는 패딩(padding) 기능이 있다. % 서식과 format( ) 함수 모두 패딩 기능을 제공한다.

3.1 % 서식의 패딩

print("%10d" % 12)  # 10자리 공간을 확보하고 우측 정렬로 12를 출력
          12
print("%-10d" % 12)  # 좌측 정렬로 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

3.2 format( ) 함수의 패딩

print("{0:>10s}".format("Apple"))  # 10자리의 공간을 확보하고 우측 정렬로 'Apple' 출력
          Apple
print("{0:<10s}".format("Apple"))  # 좌측 정렬로 출력
Apple

실수에서도 자릿수와 소수점 자릿수를 지정할 수 있다.

print("{1:>10.5f}.".format("Apple", 5.243) #10자리 공간 확보하고 소수점 5자리까지 실수 출력
'         5.24300.'
print("{1:<10.5f}.".format("Apple", 5.243) #좌측 정렬
'5.24300         .'

3. 문자열의 분리 및 결합

1) 문자열의 분리 : split( ) 함수

split( ) 함수는 특정 값을 기준으로 문자열을 분리하여 리스트 형태로 변환한다.

items = 'zero one two three'.split()  # 빈칸을 기준으로 문자열 분리하기
print(items)

# 출력결과
['zero', 'one', 'two', 'three']
  • split( ) 함수 안에 매개변수로 아무것도 입력하지 않으면 빈칸을 기준으로 문자열을 분리하라는 뜻임.
example = 'python, jquery,javascript'  # ","를 기준으로 문자열 나누기
print(example.split(","))

a, b, c = example.split(",")  # 리스트에 있는 각 값을 a, b, c 변수로 언패킹
print(a, b, c)

example = 'theteamlab.univ.edu'
subdomain, domain, tld = example.split('.')  # "."을 기준으로 문자열 나누기→언패킹
print(subdomain, domain, tld)

# 출력결과
['python', 'jquery', 'javascript']
python jquery javascript
theteamlab univ edu

2) 문자열의 결합 : join( ) 함수

join( ) 함수는 문자열로 구성된 리스트를 합쳐 하나의 문자열로 만들 때 사용함. join( ) 함수는 구분자.join(리스트형) 형태임.

colors = ['red', 'blue', 'green', 'yellow']
result = ''.join(colors)
print(result)

# 출력결과
'redbluegreenyellow'
result = ' '.join(colors) # 연결 시, 1칸을 띄고 연결
print(result)

result = ', '.join(colors) # 연결 시, ", "로 연결
print(result)

result = '-'.join(colors) # 연결 시, "-"로 연결
print(result)

# 출력결과
'red blue green yellow'
'red, blue, green, yellow'
'red-blue-green-yellow'