본문 바로가기

Python 기초

[파이썬] 문자열 (String): 정의, 인덱싱, 슬라이싱, 포맷팅

반응형

문자열

파이썬 문자열은 1가지 타입을 가지며, String이라 합니다.

 

" " 큰 따옴표 or ' ' 작은따옴표로 쌓여있는 자료는 모두 문자입니다.

 

즉, 어떠한 자료를 문자로서 사용하고자 한다면 " " 또는 ' '를 반듯이 함께 적어주어야 합니다.

 

문자열 (string)
"파이썬" 'Phython' "12" '1.2' "!@#"

 

print (type("파이썬!"))

print (type('hello'))

print (type("12"))
<class 'str'>
<class 'str'>
<class 'str'>

 

 

 

문자열 연산 

문자를 연속적으로 이어주는 기능이며(띄어쓰기(space) 포함), 그 결과 역시 문자형 타입을 가지게 됩니다. 

 

숫자 역시 " "로 감싸주면 문자형이 되므로, 아래 예시와 같이 순차적으로 연결된 결과가 나옵니다.

 

 

- 문자열 사이의 연산은 더하기(+)만 가능합니다.

 

text_sum = "제로" + "hello" + "  !"
print (text_sum)
print (type(text_sum))

text_sum = "20" + "21"
print (text_sum)
print (type(text_sum))
제로hello  !
<class 'str'>

2021
<class 'str'>

 

 

- 문자 간의 다른 사칙연산은 불가합니다.

 

text_minus = "제로" - "hello" 

text_times = "제로" * "0"

text_division = "12" / "100"

text_remainder = "12" % "hello"

text_power = "2" ** "3"
TypeError: unsupported operand type(s) for -: 'str' and 'str'

TypeError: can't multiply sequence by non-int of type 'str'

TypeError: unsupported operand type(s) for /: 'str' and 'str'

TypeError: not all arguments converted during string formatting

TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'str'

 

 

- 문자와 숫자의 곱하기는 가능합니다!

 

text_times = 'xo' * 3
print(text_times)
xoxoxo

 

 

 

인덱싱

인덱스 (index)
[명사] 책 속의 내용 중에서 중요한 단어나 항목, 인명 따위를 쉽게 찾아볼 수 있도록
일정한 순서에 따라 별도로 배열하여 놓은 목록.                                            <출처: https://dict.naver.com/>

 

사전의 정의에서 알 수 있듯,  인덱스는 원하는 자료(데이터 값, value)를 찾기 위한

별도의 순차적 목록입니다.

 

따라서 인덱스는 데이터 값의 주소 또는 이름표와 같이 이해할 수 있습니다.

 

 

- 파이썬에서 인덱스는 정수형 숫자(integer)로 정의하며, 0부터 시작합니다. 

 

index 0 1 2 3 4 5 6 7 8 9
value z e r o   c o d e !

 

 

- 문자의 길이(문자 개수)와 인덱스를 확인해 봅시다.

 

   len ( )

 

   .find (찾을 문자, 검색 시작 위치, 검색 종료 위치)

 

   .index (찾을 문자, 검색 시작 위치, 검색 종료 위치)

 

   .find와 .index 함수의 기능은 같습니다.

 

text = "zero code!"

print (len(text))				# 문자열 길이(개수) 확인

print (text.find('z'))				# 인덱스 번호 찾기
print (text.find('e'))

print (text.find(' '))

print (text.index('o', 4))			# 인덱스 검색의 시작 및 끝 지점 지정
print (text.index('e', 0, 4))
print (text.find('e', 4, 9 ))
10

0
1			# 중복값이 있는 경우, 맨 앞에 있는 값의 인덱스를 알려줍니다.

4			# 띄어쓰기(space)도 하나의 문자로 인식합니다.
			
6				
1			# 검색 영역을 설정하여 중복값의 인덱스를 확인 가능합니다. 
8

 

 

 

- 인덱스음수값으로 정의되기도 합니다.

 

- 음수는 뒤에서 부터 순차적으로 매겨진 인덱스임을 의미합니다.

 

index -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
value z e r o   c o d e !

 

 

- 인덱스를 이용해서 자료 값을 불러오기 위해 [ ] 기호를 사용합니다.

 

print(text[0])
print(text[1])
print(text[4])
print(text[-2])
print(text[-1])
z
e
			# 이 줄은 띄어쓰기가 출력된 것입니다.
e
!

 

 

  • 전체 인덱스를 모두 확인하기 위해서는 반복문(for 또는 while)이 필요합니다.
    • 반복문- 추후 업로드 예정

 

  • 인덱싱은 문자(string)와 리스트(list) 형 자료에 똑같이 적용됩니다.
    • 리스트형 자료 - 추후 업로드 예정

 

 

슬라이싱

슬라이싱(Slicing)은 인덱스에 해당하는 데이터 값을 불러오기 위한 영역을 지정하는 것입니다.

 

지정한 영역만큼 잘라서 값을 추출하는 것이죠.

 

슬라이싱 문법은 [ : ] 입니다.

 

- [ 시작 인덱스 : 끝 인덱스 ]

 

- [ 시작 인덱스 : ]

 

- [ : 끝 인덱스 ]

 

- [ : ]

 

- 시작 인덱스의 값은 포함이며(이상), 끝 인덱스의 값은 포함하지 않습니다(미만).

 

[ 1:7 ] 0 1 2 3 4 5 6 7 8 9
  z e r o   c o d e !

 

 

- 시작 인덱스 생략은 인덱스 0 과 같습니다.

 

- 끝 인덱스 생략은 데이터의 맨 마지막 인덱스와 같습니다.

 

text = "zero code!"

print(text[:])
print(text[1:7])
print(text[:7])
print(text[3:])
zero code!
ero co
zero co
o code!

 

 

 

포맷팅

포맷(format)
[명사] 1 .일정한 모양이나 형식  
2.정보·통신 데이터를 기억하거나 인쇄하기 위하여 설정하는 일정한 형식                      <출처: https://dict.naver.com/>

 

문자 포맷팅은 일정한 양식을 만들어 놓고, 원하는 일부분의 값을 변경하기 위한 방법입니다.

 

예를 들어 다음과 같은 정보를 출력해야 한다고 해 봅시다.

 

"2021-01, 비트코인: 3600만 원"

"2021-02, 비트코인: 5100만 원"

"2021-03, 비트코인: 7100만 원"

 

월(1, 2, 3)과 가격(3600, 5100, 7100) 정보만 바뀌므로 이 숫자들을 포맷팅 할 수 있습니다.

 

 

- 숫자 포맷팅에는 %d 를 사용합니다.

 

format = "2021-0%d, 비트코인: %d만원" % (1, 3600)
print(format)

format = "2021-0%d, 비트코인: %d만원" % (2, 5100)
print(format)

format = "2021-0%d, 비트코인: %d만원" % (3, 7100)
print(format)
2021-01, 비트코인: 3600만원

2021-02, 비트코인: 5100만원

2021-03, 비트코인: 7100만원

 

예를 들어 보니 별거 아니죠? 이번에는 문자를 바꾸어 봅시다.

 

 

- 문자 포맷팅에는 %s 를 사용합니다.

 

format = "2021-03, %s: %d만원" % ('비트코인', 7100)
print(format)

format = "2021-03, %s: %d만원" % ('이더리움', 2300)
print(format)

format = "2021-03, %s: %d원" % ('마나코인', 1200)
print(format)
2021-03, 비트코인: 7100만원

2021-03, 이더리움: 2300만원

2021-03, 마나코인: 1200원

 

 

- 변수를 이용하거나 필요하다면 연산을 직접 적어도 됩니다. (인덱스도 가능합니다.)

- %%는 %를 포맷팅 코드가 아닌, 문자로서 사용해야 할 때 쓰입니다.

 

month = 1
price_1 = 3600
price_2 = 5100

format = "2021-0%d, '비트코인': %d만원" % (month, price_1)
print(format)

format = "2021-0%d, '비트코인': %d만원, %d%% 상승" % (month+1, price_2, (price_2/price_1)*100)
print(format)
2021-01, '비트코인': 3600만원

2021-02, '비트코인': 5100만원, 141% 상승

 

예제에서 알 수 있듯이, 변경하고자 하는 값의 유형이 무엇인지에 따라 %s, %d 등의 코드를  적절히 사용하면 됩니다.

 

또한, (   ) 안에 나열한 값 또는 변수를 순차적으로 포맷팅 합니다.

 

 

데이터 타입에 따른 포맷팅 코드 기호는 아래 표와 같습니다.

 

 

포맷팅 코드

코드 자료형
%d 정수 integer
%f 소수 float
%s 문자 string
%% 문자 기호 %
%o 8진수
%x 16진수 

 

 

- 소수형 포매팅 %f 입니다

 

소수의 경우 소수점 자리 수에 대한 표현이 고민됩니다.

 

간단합니다. %.2f 와 같이 출력하고 싶은 자릿수를 코드 기호와 함께 적어주면 됩니다.

 

price_1 = 3600
price_2 = 5100

format = "2021-02, '비트코인': %d만원, %f%% 상승" % (price_2, (price_2/price_1)*100)
print(format)

format = "2021-02, '비트코인': %d만원, %.2f%% 상승" % (price_2, (price_2/price_1)*100)
print(format)

format = "2021-0%d, '비트코인': %d만원, %.15f%% 상승" % (month+1, price_2, (price_2/price_1)*100)
print(format)
2021-02, '비트코인': 5100만원, 141.666667% 상승

2021-02, '비트코인': 5100만원, 141.67% 상승

2021-02, '비트코인': 5100만원, 141.666666666666686% 상승

 

 

포맷팅 방법 중 % 코드는 가장 기본적인 방법입니다.

 

단순해서 사용이 쉬운 장점이 있으나, 계산이 복잡해질수록 활용 및 응용에 있어 어려움이 생길 듯합니다.

 

% 이외 다른 포맷팅 방법은 .format 함수와 f-문자열 (f-string) 방법이 있으며, 필요한 경우 따로 포스팅할 예정입니다.

 

 

감사합니다! =)

 

 

반응형