문자열 타입
문자열 타입(text sequence types) : str
문자열(string)이란 문자로 이루어진 데이터의 집합을 의미하며, 파이썬에서는 다음과 같이 다양한 방법으로 문자열을 표현할 수 있습니다.
1. 큰따옴표(" ")로 감싸기
2. 작은따옴표(' ')로 감싸기
3. 큰따옴표 3개(""" """)로 감싸기
4. 작은따옴표 3개(''' ''')로 감싸기
실행 결과
파이썬
Python
내 이름은 '홍길동'이야!
내 이름은 "홍길동"이야!
위의 예제처럼 큰따옴표와 작은따옴표의 용법상 차이는 전혀 없으며, 이 두 가지 따옴표를 모두 사용하는 이유는 4번과 5번 라인처럼 문자열 내에서 따옴표를 정확히 표현하기 위함입니다.
하지만 따옴표가 등장하는 순서에 따라 정확하게 사용하지 않으면 예상치 못한 문제가 발생할 수 있으므로, 그 사용에 주의를 기울여야 합니다.
§ 정상적인 문자열 : “그녀는 ‘당신이 너무 멋져요!’라고 말했어.”
§ 잘못된 문자열 : “그녀는 ‘당신이 너무 멋져요!”라고 말했어.’
위의 잘못된 문자열에 대해 파이썬은 [“그녀는 ‘당신이 너무 멋져요!”]까지 만을 정상적인 문자열로 인식하고, 나머지 부분인 [라고 말했어.’]는 정상적인 문자열로 인식하지 못해 에러를 발생시킬 것입니다.
여러 줄의 문자열 표현하기
큰따옴표나 작은따옴표 3개를 연속해서 사용하면 여러 줄의 문자열을 그대로 표현할 수 있습니다.
예제
print("""큰따옴표 3개는
여러 줄의 문자열을 표현할 때
사용합니다.""")
print('''작은따옴표 3개도
여러 줄의 문자열을 표현할 때
사용합니다.''')
print('여러 줄의 문자열을\n'
'개행문자를 사용하여 표현하는 것이\n'
'소스코드의 가독성은 더 좋습니다.')
실행 결과
큰따옴표 3개는
여러 줄의 문자열을
표현할 때 사용합니다.
작은따옴표 3개도
여러 줄의 문자열을
표현할 때 사용합니다.
여러 줄의 문자열을
개행문자를 사용하여 표현하는 것이
소스코드의 가독성은 더 좋습니다.
위 예제의 9번과 10번 라인에 사용된 줄바꿈 문자(‘\n’)는 출력 시 문자열의 라인을 다음 라인으로 바꿔주는 역할을 하며, 이를 사용함으로써 따옴표 3개를 사용하는 표현보다 좀 더 출력 결과와 비슷한 형태로 코드를 작성할 수 있습니다.
문자열끼리의 연산
파이썬에서는 숫자처럼 문자열끼리 서로 더하거나 문자열에 숫자를 곱할 수도 있습니다. 문자열끼리의 더하기(+) 연산은 두 문자열을 서로 연결시켜주며, 문자열과 정수의 곱하기(*) 연산은 해당 문자열을 정수배만큼 반복해서 연결해 줍니다.
실행 결과
파이썬 문자열
파이썬 파이썬 파이썬
문자열에서 문자 선택하기
문자열은 문자들의 연속된 집합이라고 볼 수 있습니다. 따라서 파이썬에서는 문자열 내에서 특정 위치의 문자를 손쉽게 선택할 수 있도록 다음 예제와 같이 문자열을 문자들의 배열로 다룰 수 있게 해줍니다.
실행 결과
파
코
!
14
위 예제의 3번 라인처럼 문자열의 첫 번째 문자의 인덱스(index)는 0부터 시작해서 1씩 증가되며, 이때 띄어쓰기(white space)도 하나의 문자로 취급됩니다. 파이썬에서는 음의 인덱스도 지원하며, 음의 인덱스는 문자열의 마지막 문자를 -1로 놓고 역순으로 증가하게 됩니다.
대부분의 프로그래밍 언어에서는 한글과 영문자의 크기가 서로 다르게 취급되는데, 파이썬에서는 한글과 영문자의 크기를 동일하게 취급합니다.
문자열 자르기
문자열을 다루다보면 문자열의 일부분만을 사용하거나 문자열의 일부만을 변경해야 할 경우가 생깁니다. 이러한 경우 손쉽게 처리할 수 있도록 파이썬에서는 문자열의 일부분을 잘라 반환해주는 문자열 슬라이싱(slicing)을 지원하고 있습니다.
실행 결과
강
강아지
우리집
강아지 이름은 멍멍이입니다.
위 예제의 4번 라인처럼 콜론(:)기호를 사용하면 문자열의 일부분만을 자를 수 있으며, 이때 콜론의 앞쪽에 위치한 인덱스부터 콜론의 뒤쪽에 위치한 인덱스 바로 앞 문자까지를 반환합니다. 이처럼 콜론의 앞쪽에 위치한 인덱스는 곧바로 시작 인덱스가 되지만, 콜론의 뒤쪽에 위치한 인덱스는 해당 인덱스에서 1을 뺀 인덱스가 마지막 인덱스가 됩니다.
또한, 시작 인덱스나 종료 인덱스 중 하나를 생략하면 손쉽고 빠르게 부분 문자열을 생성할 수 있습니다.
특정 문자의 개수 및 위치
count() 함수는 해당 문자열에 인수로 전달받은 문자가 모두 몇 개 포함되어 있는지를 확인하여 반환합니다.
또한, find()나 index() 함수를 사용하면, 해당 문자열에 인수로 전달받은 문자가 처음으로 등장하는 인덱스(index)를 알 수 있습니다.
예제
py = "python programming"
print(py.count('p'))
print(py.find('o'))
print(py.index('o'))
print(py.find('z'))
# print(py.index('z'))
실행 결과
2
4
4
-1
위 예제의 5번과 6번 라인에서 find()와 index() 함수의 결과는 동일하게 4로 출력됩니다.
이 두 함수의 차이점은 바로 8번과 9번 라인처럼 해당 문자열에 포함되어 있지 않은 문자를 검색할 때 나타납니다. find() 함수는 해당 문자열에 전달받은 문자가 포함되어 있지 않으면 -1을 반환하지만, index() 함수는 ValueError를 발생시키며 프로그램을 강제 종료합니다.
따라서 index() 함수를 사용할 때는 반드시 전달받은 문자가 해당 문자열에 포함되어 있는지를 먼저 확인하고 사용해야 합니다.
문자열의 대소문자 변환
upper() 함수는 문자열의 모든 문자를 대문자로 변환해주며, lower() 함수는 문자열의 모든 문자를 소문자로 변환시켜 줍니다.
실행 결과
PYTHON
python
Python
위 예제의 6번 라인의 실행결과를 보면 원본 문자열은 변하지 않았음을 확인할 수 있습니다. 이처럼 지금까지 우리가 문자열 다루기 단원에서 살펴본 문자열 함수들은 모두 원본 문자열 그 자체를 변환하는 것이 아니라, 변환된 새로운 문자열을 생성하여 반환해 주는 것입니다.
문자열 변경하기
replace() 함수는 첫 번째 인수로 전달된 문자열을 해당 문자열에서 찾아 두 번째 인수로 전달된 문자열로 변경해 줍니다. 이때 해당 문자열에서 첫 번째 인수로 전달된 문자열을 찾을 수 없으면, 원본 문자열을 그대로 반환합니다.
실행 결과
자바 공부는 너무 재밌어요!
파이썬 공부는 너무 재밌어요!
문자열 나누기
split() 함수는 전달받은 문자를 기준으로 해당 문자열을 여러 개의 부분 문자열로 나누어 하나의 리스트로 반환합니다.
실행 결과
['파이썬', '공부는', '너무', '재밌어요!']
['파이썬', '공부는', '너무', '재밌어요!']
파이썬 공부는 너무 재밌어요!
위 예제의 3번 라인에서는 문자열 py를 띄어쓰기를 기준으로 나누고 있습니다. 또한, 4번 라인처럼 split() 함수에 아무런 인수도 전달하지 않으면, 자동으로 띄어쓰기나 탭 문자, 줄바꿈 문자 등과 같은 공백(white space)을 기준으로 문자열을 나누게 됩니다.