관리 메뉴

1. 파이썬(Python) 문자열2(인덱싱,슬라이싱,포매팅,함수) 본문

Python/Python 기본 개념

1. 파이썬(Python) 문자열2(인덱싱,슬라이싱,포매팅,함수)

ª_ª 2017. 7. 28. 10:04
728x90
반응형


4. 문자열 인덱싱 및 슬라이싱

- 인덱싱(Indexing)이란 무엇인가를 가르킨다라는 의미입니다.

- 슬라이싱(Slicing)이란 무엇인가를 잘라낸다라는 의미입니다.

 

4_1. 문자열 인덱싱이란?

>>> string = ‘Hello world’

 

위 소스 코드에서 변수 string에 저장한 문자열의 각 문자마다 번호를 매겨 보면 다음과 같습니다.

H

e

l

l

o

 

w

o

r

l

d

0

1

2

3

4

5

6

7

8

9

10

 

아래 소스 코드를 실행하면 ‘11’이라는 값이 반환됩니다.

>>> string = ‘Hello world’

>>> len(string)

11

 

위 표는 10이라고 나왔는데 왜 11이지 라고 생각할 수 있는데 위에 표는 0부터 시작합니다. 그래서 0부터 10까지를 세어보면 11이 나옵니다. 근데 문자는 10개인데 왜 11개의 글자로 구성되어있는지 궁금할 수 있습니다. ‘hello’‘world’라는 단어 사이에 있는 공백도 문자로 간주하기 때문입니다. 위 소스 코드에서 len()은 함수이고 length의 줄임말입니다. 즉, 문자열의 길이를 측정하는 함수 입니다.

 

4_2. 문자열 인덱싱 활용하기

>>> string = 'Hello world'

>>> len(string)

11

>>> string[0]

'H'

>>> string[1]

'e'

>>> string[5]

' '

>>> string[-1]

'd’

 

앞의 string[0]string[1]string[5]는 쉽게 이해 할 수 있는데 마지막 string[-1]이 뜻하는 것은 무엇일까요? 문자열을 뒤에서부터 읽기 위해서 마이너스(-) 기호를 붙인 것입니다.

 

string[12]string[-12]을 입력하면 어떡해 될까요?

>>> string[-12]

Traceback (most recent call last):

File "<pyshell#46>", line 1, in <module>

string[-12]

IndexError: string index out of range

>>> string[12]

Traceback (most recent call last):

File "<pyshell#47>", line 1, in <module>

string[12]

IndexError: string index out of range

 

1212에는 문자가 없기 때문에 에러를 발생 시킵니다.

 

4_3. 문자열 슬라이싱이란?

문자열에서 단순히 한 문자만을 뽑아내는 것이 아니라 ‘hello’ 또는 ‘world’같은 단어들을 뽑아내는 방법은 없을까요?

 

첫 번째 방법

>>> a = 'Hello world'

>>> b = a[0] + a[1] + a[2] + a[3] + a[4]

>>> b

'Hello'

 

첫 번째 방법처럼 단순하게 접근할 수도 있지만 파이썬 에서는 더 좋은 방법을 제공합니다.

 

두 번째 방법(슬라이싱 기법)

>>> a = 'Hello world'

>>> a[0:5]

'Hello’

 

a[0:5]가 뜻하는 것은 a라는 문자열(문장)에서 0부터 5까지의 문자를 뽑아낸다(잘라낸다)라는 뜻입니다. a[0] ~ a[4]까지 합치면 hello니까 a[0:4]로도 ‘Hello’라는 단어를 추출할 수 있다고 생각 됩니다. 아래의 예를 보면

 

>>> a = "Hello world"

>>> a[0:4]

'Hell’

 

이렇게 되는 이유는 a[시작 번호:끝 번호]를 지정하면 끝 번호에 해당하는 것은 포함되지 않습니다.

, a[0:4]를 수식으로 나타내면 다음과 같습니다.

0 <= a < 4

이 수식을 만족하는 aa[0], a[1], a[2], a[3]입니다. 따라서 a[0:4]‘Hell’이고 a[0:5]‘Hello’가 되는 것입니다.

 

4_4. 문자열 슬라이싱 활용하기

>>> a[0:6]

'Hello '

 

위의 예는 a[0] + a[1] + a[2] + a[3] + a[4] + a[5]와 같습니다. a[5]는 공백 문자이기 때문에 ‘Hello ’가 출력되는 것입니다. 공백 문자도 일반 문자와 동일하게 취급되는 것을 알아 둬야 합니다. ‘Hello’‘Hello ’는 다른 문자열입니다.

 

슬라이싱은 항상 시작 번호가 ‘0’일 필요는 없습니다.

>>> a[0:4]

'Hell’

>>> a[2:4]

'll'

>>> a[6:8]

'wo'

 

a = ‘Hello world’변수를 통해 ‘world’만 추출하려면 어떻게 해야 될까요?

>>> a[6:11]

‘world’

 

위 코드의 문제점은 마지막 글자의 위치까지 번호 세기가 귀찮다는 것입니다. 이러한 단점을 보안하기 위해서 파이썬의 슬라이싱에서는 시작 번호 또는 끝 번호을 생략하면 알아서 해당 문자열의 시작과 끝을 의미하게 할 수 있습니다.

 

>>> a[6:]

'world'

>>> a[:6]

'Hello '

>>> a[0:]

'Hello world'

>>> a[:11]

'Hello world'

 

a[시작번호:끝번호]에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지 값을 가져올 수 있습니다.

>>> a[:]

'Hello world’

 

슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있습니다.

>>> a = 'Hello world '

>>> a[6:-1]

'world'

>>> a[6:-2]

'worl'

>>> a[6:-3]

'wor'

>>> a[6:-4]

'wo'

>>> a[6:-5]

'w'

>>> a[6:-6]

''

 

인덱스의 값이 음수인 경우에는 문자열의 뒤쪽부터 역순으로 글자를 셉니다. a[6:-1]이 뜻하는 것은 a[6]에서부터 a[-2]까지를 말합니다. a[-1]은 포함시키지 않습니다. -11을 한 번 더 추가한다고 생각 하는 게 낫습니다.

 

5. 문자열 포매팅

 

문자열 포맷 코드

포맷 코드

설명

%d

정수(Integer)

%f

부동 소수(float)

%c

문자(Character)

%s

문자열(String)

%o

8진수

%x

16진수

%%

문자 %

 

문자열 포매팅은 문자열 사이에 포맷코드를 대입시켜서 결과를 출력하는 것입니다.

 

5_1. 정수형 포매팅

5_1_1) 숫자를 대입하는 방법

>>> "짜장면 한 그릇에 %d원 입니다." %4000

'짜장면 한 그릇에 4000원 입니다.‘

 

5_1_2) 변수로 대입하는 방법

>>> value = 4500

>>> "짬뽕 한 그릇에 %d원 입니다." %value

'짬뽕 한 그릇에 4500원 입니다.'

  

5_2. 부동 소수 포매팅

5_2_1) 숫자를 대입하는 방법

>>> "원주율은 %f......입니다." %3.141592

'원주율은 3.141592......입니다.'

 

5_2_2) 변수로 대입하는 방법

>>> PI = 3.141592

>>> "원주율은 %f......입니다." %PI

'원주율은 3.141592......입니다.‘

 

5_3. 2개 이상의 포매팅

>>> "짜장면과 짬뽕의 가격은 각각 %d원과 %d원입니다." %(4000,4500)

'짜장면과 짬뽕의 가격은 각각 4000원과 4500원입니다.'

 

2개 이상의 값을 넣으려면 마지막 % 다음 괄호 안에 콤마( , )로 구분해서 각각의 변수를 넣어 주면 됩니다.

 

5_4. 문자열 포매팅

문자열 포매팅은 어떤 형태의 값이든 변환해 넣을 수 있습니다.

 

>>> "짜장면 한 그릇에 %s원 입니다." %4000

'짜장면 한 그릇에 4000원 입니다.'

>>> "원주율은 %s......입니다." %3.141592

'원주율은 3.141592......입니다.'

 

40003.141592를 삽입하려면 정수형(%d)와 부동 소수형(%f)를 사용해야 합니다. 하지만 %s를 사용하면 % 뒤에 있는 값을 문자열로 바꾸기 때문입니다.

 

5_5. 문자 %

수정 전

>>> "프로젝트 완료까지 %d% 남았습니다." %20

Traceback (most recent call last):

File "<pyshell#8>", line 1, in <module>

"프로젝트 완료까지 %d% 남았습니다." %20

TypeError: not enough arguments for format string

 

예문을 사용하면 20%가 출력될 것이라고 예상하겠지만 파이썬은 값이 올바르지 않다는 (value Error) 메시지를 출력합니다. 이유는 문자열 포맷 코드인 %뒤에는 d, f, s 등 그거에 알맞게 코드가 들어가야 하는데 그렇지 못해서입니다. 해결방법은 %%를 사용해서 그 자체인 %를 출력합니다.

 

수정 후

>>> "프로젝트 완료까지 %d%% 남았습니다." %20

'프로젝트 완료까지 20% 남았습니다.'

 

포매팅을 안하고 %를 사용하면 에러 없이 사용 가능합니다.

>>> "프로젝트 완료까지 20% 남았습니다."

'프로젝트 완료까지 20% 남았습니다.'

 

6. 문자열 관련 함수

문자열 함수를 사용하려면, 문자열 변수 이름 뒤에 마침표( . )를 붙인 다음에 함수 이름을 사용하면 됩니다. 마침표( . )를 사용한 다음에 키보드에 있는 tap키를 누르면 무슨 함수가 있는지 보여줍니다. 또한 변수명이 길때도 tap키를 누르면 자동완성을 하게 됩니다.

 

6_1. 문자 개수 세기(count)

>>> a = "happy"

>>> a.count('a')

1

 

문자열의 a의 개수는 1개입니다.

 

6_2. 위치 알려주기1 (find)

>>> a = "happy"

>>> a.find('y')

4

>>> a.find('b')

-1

 

y는 결과가 잘나왔는데 b1이 출력 되었습니다. 이유는 찾는 문자나 문자열이 존재하지 않는다면 1을 반환 합니다.

 

6_3. 위치 알려주기2 (index)

>>> a = "happy"

>>> a.index('h')

0

>>> a.index('z')

Traceback (most recent call last):

File "<pyshell#21>", line 1, in <module>

a.index('z')

ValueError: substring not found

 

indexfind와 다른 점은 없는 문자나 문자열을 입력했을 때 find1을 반환하지만 index는 에러문을 출력합니다.

 

6_4. 문자열 삽입 (join)

>>> a = ""

>>> a.join('1234')

'1234'

>>> a = ","

>>> a.join('123456')

'1,2,3,4,5,6'

>>> a = ", "

>>> a.join('123456789')

'1, 2, 3, 4, 5, 6, 7, 8, 9'

 

문자열 안에 join()함수를 이용해서 값을 삽입합니다.

 

6_5. 문자열 나누기 (split)

6_5_1) 공백 기준으로 문자열 나누기

>>> a = "He's reading a book."

>>> a.split()

["He's", 'reading', 'a', 'book.']

 

아무것도 입력하지 않으면 공백으로 인식합니다.

 

6_5_2) - 기호 기준으로 문자열 나누기

>>> a = "02-1234-5678"

>>> a.split(-)

SyntaxError: invalid syntax

>>> a.split('-')

['02', '1234', '5678']

 

기호 기준으로 나눌 때는 (' ') 문자를 꼭 써줘야 합니다.

 

문자열 함수 정리

함수

설명

count()

문자 개수 세기

find()

문자 위치 알려주기

index()

문자 위치 알려주기

join()

문자열 삽입

upper()

소문자를 대문자로 바꾸기

lower()

대문자를 소문자로 바꾸기

lstrip()

왼쪽 공백 지우기

rstrip()

오른쪽 공백 지우기

strip()

양쪽 공백 지우기

replace()

문자열 바꾸기

split()

문자열 나누기


문자열 연습문제 풀러가기

728x90
반응형
Comments