Python/Python 시작하기

5. 파이썬 자료형 - 문자열 연산

arvigoes 2019. 12. 12. 23:18

파이썬은 문자열다루기가 정말 편한 언어중 하나입니다.

다른 언어에서 쉽게 찾아 볼 수 없는 재미 있는 기능이 많고, 쉽게 사용 가능 합니다.

 

문자열 연결하기                                                   

# Code 1
# 문자열 더하기
who = "내가"
what = "사과를"
do = "먹었다"

sentence = who + what + do

print(sentence)

8-1. 결과

코드를 어렵게 보지말고 눈으로 보이는 데로 이해 하면 됩니다.

단순하게 문자열을 더했을때 우리가 예상하는 그대로 문자열이 합쳐지는 형태 입니다.

 

이런것도 있어요 코드 제네레이터 할때 많이 사용 되는데 재미 있습니다.

줄바꿈으로 하면 몇줄을 띄울지 보다 편해 집니다.

# Code 2
# 곱하기

str = "사과 "

print(str * 5)

nextline = "\n"
print( nextline * 3)
print(str)

8-2. 물자열 곱셈 결과

사과 를 곱셈 한것 보다 nextline 을 곱셈 연산 하는게 여러모로 코드 가독성도 올려 주고 좋아 보입니다.

이처럼 파이썬에서 문자열은 예상하는 그대로 동작을해서 사용하기가 정말 쉬운 언어 입니다.

 

문자열 인덱싱(indexing) 슬라이싱(slicing)               

인덱싱은 어떤 것을 "가리킨다" 는 의미 이고 슬라이싱은 "잘라낸다" 는 의미 입니다.

문자열에서 특정 단어를 인덱싱(가리키고)  필요한 문장을 슬라이싱(잘라낸다) 입니다.

인덱싱과 슬라이싱은 뒤에 배울 자료형인 리스트나 튜플에서도 많이 사용하는 기법이니 한번에 확실히 익혀두세요.

 

문자열 길이

인덱싱과 슬라이싱의 가장 기본은 전체 길이를 알아내는 것 부터 시작합니다.

# Code 3
# 길이

str = "내가 사과를 먹었다"

length = len(str)
print(length)

8-3. 문자열길이 확인

문자열의 길이를 알아야 해당 문자열의 인덱싱이 가능합니다. 문자열은 10글자인데 40번째 글자를 알아보려고 하면 아래와 같은 에러가 나면서 수행이 중지 됩니다.

8-4. 인덱싱 에러

인덱싱

인덱싱은 문자열의 특정한 위치의 문자를 읽을때 인덱스 연산자([])를 사용하여 문자열 안의 특정한 위치의 값을 뽑아내는 역활을 합니다. 이러한 작업을 인덱싱이라고 합니다.

인덱싱하는 위치의 번호는 0번부터 부여됩니다. 이후 리스트에서도 비슷한 내용이 있는데 익덱스 연산의 첫번째항목은 항상 0 입니다.

그러므로 0 은 첫번째 9 는 10번째 를 가르키게 되는데 처음엔 어색하겠지만 익숙해 지실 꺼라고 생각해요

# Code 4
# 인덱싱
#      -0123456789-
text = "ABCDEFGHIJ"
print(text[0])
print(text[9])

8-5. 인덱싱 결과

예상했던 결과와 동일하시죠?  "0으로 시작된다"는 점만 유의 하면 인덱싱자체가 어렵지는 않을꺼라 생각합니다.

# Code 5
# 인덱싱
#      -0123456789-
text = "ABCDEFGHIJ"
print(text[-1])
print(text[-0])
print(text[0])

"Code 5" 의 실행결과는 어떻게 될까요?

저도 처음에는 당황했는데요 쉽게 생각하시면 됩니다. 파이썬은 쉽게 생각나는데로 새용하면 되는 언어 이니까요.

8-5. 인덱싱 음수

예상 하셨던 것처럼 -1 은 끝에서 첫번째를 나타냅니다. 현재는 9 동일한 값을 보여주고 있네요

그리고 0 에는 음수의 계념이 없으므로 -0 이나 0 은 동일한 첫번째 값을 보여주고 있습니다.

 

슬라이싱

문자열 슬라이싱은 문자열에서 내가 원하는 내용만 잘라내고 싶을때 사용하는 기법입니다.

# Code 5
# 슬라이싱

text = "내가 사과를 먹었다"
print(text)
# "사과" 만 출력 하고 싶을때
print(text[3] + text[4])

8-6. 결과

위 방법으로 해결이 가능하지만 "사과를 먹었다" 를 출력하고 싶다면

 

# Code 6
# 슬라이싱

text = "내가 사과를 먹었다"
print(text)
# "사과" 만 출력 하고 싶을때
print(text[3] + text[4] + text[5] + text[6] + text[7] + text[8] + text[9])

보기만 해도 귀찮아 지시죠?

이럴때 사용하라고 만든게 슬라이싱 입니다.

# Code 7
# 슬라이싱

text = "내가 사과를 먹었다"
print(text)
# "사과" 만 출력 하고 싶을때
# print(text[3] + text[4] + text[5] + text[6] + text[7] + text[8] + text[9])
# ** 줄의 처음에 "#" 을 붙여두면 주석 처리되어 해당 줄은 실행되지 않습니다. 다음에 주석에 대해서도 다뤄 볼게요 **
text2 = text[3:10]
print(text2)
print(text)

8-7. 슬라이싱

많이 간단해지죠? 원본 "text" 에 대해서도 변경없이 만들어져요

원본도 변경하고 싶다면 자신에게 할당 하면 됩니다.

# Code 8
# 슬라이싱

text = "내가 사과를 먹었다"
print(text)
# "사과" 만 출력 하고 싶을때
# print(text[3] + text[4] + text[5] + text[6] + text[7] + text[8] + text[9])
# ** 줄의 처음에 "#" 을 붙여두면 주석 처리되어 해당 줄은 실행되지 않습니다. 다음에 주석에 대해서도 다뤄 볼게요 **
text = text[3:10]

print(text)

 

text[3:10] 을 해석하면 text 3번 인덱스 부터 10번인덱스 전까지 가져오라는 의미 입니다.

그래서 3, 4, 5, 6, 7, 8, 9 번 인덱스의 데이터만 가져 오게 됩니다.

[시작:이전] 이부분만 유념 하시면 인덱싱도 쉽게 사용 하실 수 있을꺼라 생각 합니다.

 

기본적인 이해는 넘어가고 이제 특이한 사용법에 대해서 확인 해 볼까요?

# Code 9
# 슬라이싱
text = "내가 사과를 먹었다. 많이 먹었다."
print(text)
# "많이 먹었다" 만 출력 하고 싶을때
print(text[12:])
# "내가 사과를 먹었다" 만 출력 하고 싶을때
print(text[:10])
# "많이" 만 출력 하고 싶을때
print(text[12:-5])
print(text[:])

8-8. 슬라이싱 특수

[12:] - 12번인덱스 이후로 전부.

[:10] - 0번 인덱스(처음) 부터 10번인덱스 이전까지 (이전이니까 10번인덱스 제외) ** 중요

[12:-5] - 음수도 사용 됩니다. 12번 인덱스 부터 끝에서 5번째 인덱스 이전 까지

 

인덱싱과 슬라이싱은 다른것도 마찬가지 겠지만 많이 사용해 보셔야 익숙해 집니다.

사용상에 문제가 생기면 치명(?) 적인 결과를 가져올 수도 있기 때문이지요

그리고 앞서 언급 했지만 문자열 이외에도 용도가 많아 자주 사용하게 될거라 미리 익숙해 지시면 좀 더 편안한 코딩생활이 되리라 생각합니다.