파이썬(Python)

문자형 자료(인덱싱, 슬라이싱, 포매팅)

BlueNoa 2021. 5. 24. 21:48
728x90
반응형

· 문자형 자료

문자형 자료는 대체로 "" 또는  '' 등으로 둘러싸여 있는 것들을 말한다.

예를 들어 "안녕하세요" 혹은 '반가워요' 등이 모두 문자열이다. 파이썬에서 주석처리를 할 때 사용하는 """ 연속 따음표도 문자열로써 인식을 한다. 이는 여러 줄의 데이터를 입력할 때 굉장히 유용하다.

 

다만 영문자의 경우에는 '를 사용하기 때문에 항상 이 점을 인지하고 데이터를 입력해야 한다.

아래의 예시와 같이 항상 " "을 이용해서 '를 감싸주어야 한다. 밖깥부분을 ' '을 이용해서 감싸는 경우 문자열이 끊기게 된다.

 

<예시>

print("I'm a bit dry.")

<잘못된 예시>

가운데 문자들은 전부 문자형 데이터로써 인식하지 못하고 있다.

print('I'm a bit dry.')

 

 

· 문자열의 연산

문자열도 숫자에서 사용하는 연산 기호로 여러가지 표현이 가능하다.

 

(1) 문자열의 합

문자열에서의 합은 수학에서 생각하는 덧셈이라기 보다는 서로 붙이는 느낌이다.

 

<예시>

a = "It's very"
b = " hot today."
print(a + b)

<결과>

It's very hot today.

 

(2) 문자열의 곱

문자열의 곱은 수학에서 사용하는 곱보다는 문자열의 반복 출력을 의미한다.

 

<예시>

print("It's very hot today." * 3)

<결과>

It's very hot today.It's very hot today.It's very hot today.

 

(3) 문자열의 길이

파이썬의 기본적으로 제공하는 len함수는 length의 줄임말로 문자열의 길이를 숫자로 알려준다.

 

<예제>

a = 'How is the weather today?' 
print(len(a))

<결과>

25

 

· 문자열 인덱싱과 슬라이싱

a = 'How is the weather today?'

컴퓨터에서 문자열을 인식할 때 자리수는 1부터가 아니라 0부터 시작한다.

· 인덱싱

H o w   i s   t h e   w e a t h e r   t o d a y ?
0                   1                   2        
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

2행은 십의 자리의 숫자를 말하고 3행은 일의 자리의 숫자를 말한다. 이제 특정 위치의 문자를 출력해보면 다음과 같다. (여기서 특정 문자를 출력하는 것이 바로 인덱싱이다. = 무엇인가를 (특정) 가르킨다.)

 

<예시>

print(a[4])

<결과>

i

4번째 자리의 글자인 'i'가 출력되었다.

여기서 '-'를 이용해서 출력할 수도 있다. 바로 역순의 자릿수인데 -0은 0과 같기 때문에 -0으로 해도 역순 출력은 하지 않는다.

 

<예시>

print(a[4], a[-1])

<예시>

i ?

역순의 첫 번째는 '?'이기 때문에 물음표가 출력되었다.

· 슬라이싱

문자열의 슬라이싱이란 한 문자만 뽑는 것이 아니라 단어를 범위로 뽑아내는 방법으로 다음과 같다.

 

<예시>

print(a[11:18])

<결과>

weather

 

여기서 약간 의아한 점을 볼 수 있다.

'r'의 자릿수는 17인데 왜 범위를 지정하는 [11:18]에서는 17이 아니라 18이 들어갔을까? 이것은 컴퓨터가 처음 시작하는 숫자'<=' 으로 시작하지만 마지막 자리'<' 이기 때문에 범위 지정의 마지막 자릿수는 +1를 해주어야 한다. 즉 수식으로 표현하면 출력해야되는 문자열은 11<=로 시작해서 <18인 것이다.

또 다른 방법으로는

<예시>

print(a[:11]); print(a[11:]) # 한 줄에 연속으로 명령문을 쓸 때는 ';'을 사용한다. 
# 첫 문장부터 10번째까지 출력, 11번째부터 문장의 끝까지 출력 
print(a[0::2]) # 0번째부터 문장 끝까지 출력, 2번씩 건너 띄며 출력

만약 a[:] 으로 출력한다면 그냥 모든 문자열이 다 출력된다.

<결과>

How is the 
weather today? 
Hwi h ete oa?

· 특정 자릿수의 문자를 바꾸는 방법?

보통 문자열의 글자를 바꿀 때 아래와 같은 예시대로 하는 경우가 있다. 하지만 이는 옳바른 방법이 아닌다.

str 즉, 문자열은 immutable(불변)한 자료형이기 때문이다.

<예시>

a[19] = 'm' 
print(a)

<결과>

a[19] = 'm' 
TypeError: 'str' object does not support item assignment

 

변수를 새롭게 다시 지정해주거나, 특정 문자열을 추출하여 다른 문자열과 결합하는 형태로 새로운 문장을 만들어주어야 한다. 아니면 특정 자리의 값만 자주 바뀐다면 바로 앞 글에서 소개한 문자열 포매팅을 이용하면 된다.

 

· 문자열 포매팅

(1) .format

이 format기능에는 {}을 이용해서 특정 공간에 내용을 추가해줄 수 있다.

매번 출력값이 바뀌는 문장에 사용하면 좋다.

 

<예시>

a = '{0:<10}'.format('special') # 왼쪽 정렬, 문자열을 총 10으로 맞춘다. 
print(a) 

a = '{0:>10}'.format('special') # 오른쪽 정렬, 문자열을 총 10으로 맞춘다. 
print(a) 

a = '{0:^10}'.format('special') # 가운데 정렬, 문자열을 총 10으로 맞춘다. 
print(a)

<결과>

special
   special 
 special

 

특정 공백을 채울 수도 있다.

<예시>

a = '{0:!^10}'.format('special') # 가운데 정렬하고 10자리 확보하고 공백을 !로 채운다. 
print(a) 

a = '{0:!<10}'.format('special') # 왼쪽 정렬, 10자리확보, 공백을 !로 확보 
print(a)

<결과>

!special!! 
special!!!

 

포매팅의 내용을 좀 더 추가해서 다음과 같은 표현도 가능하다.

<예시>

a = 3.424242 
print('{0:10.3f}'.format(a)) # 0에 a변수가 들어가고, 10자리 출력과 소수점은 3자리까지 출력한다.

<결과>

3.424

 

포매팅에 사용하는 { } 를 출력하기 위해서는 다음과 같이 한다.

 

<예시>

print('{{ print!! }}'.format())
print("앞으로 {}일 남았습니다. {}고객님".format(30, "이승민"))

.format()에 들어있는 값들은 순서대로 0부터 시작한다.(자릿수)

그러므로 추가해줄 문장의 {}안에 자릿수를 입력하여 {0} 이런 형태로 입력하면, 순서대로 대입되는게 아니라 사용자가 임의로 데이터를 넣을 수 있다.

 

<결과>

{ print!! }
앞으로 30일 남았습니다. 이승민고객님

format함수의 괄호가 공백이기 때문에 중괄호 내의 내용이 그대로 출력되었다.

파이썬 3.6 버전 이상부터는 앞에 f 접두사를 이용해서 편리하게 사용할 수도 있다.

 

<예시>

area = '서울' 
print(f'나는 {area}에 살고 있습니다.')

<결과>

나는 서울에 살고 있습니다.

 

​(2) 문자열 포맷 코드 이용

문자열에는 포맷 코드라는 것이 존재하는데 이를 이용하면 위에서 사용한 .format처럼 자료를 입력할 수 있다.

 

<예시>

print("I live %s to its fullest." %"life")
print("I wish you all the best in %d."%2022)

​<결과>

I live life to its fullest.
I wish you all the best in 2022.

​%에는 변수를 넣어줄 수 도 있다. 만약 98% 등의 숫자를 입력하고 싶다면, %d%%에 %98를 넣어주어야 한다.

복수의 값을 넣고 싶다면 처음에 나왔던 .format을 이용하면 된다.

 

 

 

 

728x90
반응형