안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 문자열 타입 String 자료형에 대해서 한번 알아보려고 합니다.
정말 많이 사용할 텐데요. 그렇기 때문에 여러 포스팅으로 나누어서 진행하게 되었습니다.
파이썬 문자열 관련 메서드, 함수가 궁금하신 분들은 [바로가기]
<목차>
1. 문자열 만들기
2. 문자열에서 쓰이는 여러 이스케이프 코드
3. 문자열 인덱싱과 슬라이싱
4. 문자열 연산하기 (문자열 연결, 반복, 길이 구하기)
1. 파이썬 문자열 만들기
파이썬에서는 문자열을 만드는 방법은 4가지가 있습니다.
1
2
3
4
5
6
7
8
9
|
s1 = "this is python string"
print(s1)
print(len(s1))
print()
s2 = "12345"
print(s2)
print(len(s2))
|
cs |
1-1) 작은따옴표(') 이용
1
2
3
|
'kim'
'1212 BlockDMask'
'python.'
|
cs |
이런 식으로 작은따옴표로 문자나, 단어 숫자 등을 묶으면 문자열이 됩니다.
1-2) 큰 따옴표(") 이용
1
2
3
4
|
"문자열 만들기"
"BlockDMask blog"
"python. String 1234567890"
|
cs |
이렇게 큰 따옴표(")를 이용해서 문자열을 만들 수 있습니다.
1-3) 작은 따옴표 3개(''') 이용
1
2
3
4
5
6
7
8
9
10
11
12
|
'''문자열 만들기 3'''
'''BlockDMask
세 개를 이어 붙이면
다음줄에 이어서 만들수 있어요'''
'''
가나다라
마바사
아자차카
타파하
'''
|
cs |
이렇게 작은 따옴표 세 개를 이용하면 여러 줄에 걸쳐서 문자열을 만들 수 있습니다. 편리하죠?
1-4) 큰 따옴표 3개(""") 이용
1
2
3
4
5
6
7
8
9
10
11
|
"""문자열 만들기 4"""
"""BlockDMask
세 개를 이어 붙이면
다음줄에 이어서 만들수 있어요22"""
"""abcdef
ghi
jklmo
pqrs"""
|
cs |
큰 따옴표 세 개도 동일하게 여러 줄에 걸쳐서 문자열을 만들 수 있습니다.
이렇게 해서 파이썬에서는 4가지 방법으로 문자열을 만들 수 있습니다.
왜 문자열을 만드는데 작은따옴표도 쓰고 큰 따옴표도 쓰냐 하나만 쓰면 되지 라고 생각하실 수도 있는데, 이것은 파이썬이 우리에게 편리함을 주기 위해서입니다.
문자를 쓰다가 "kim's club"과 같이 작은따옴표가 문자열을 가리키는 기호가 아닌 문자열 내부에 속해야 하는 경우가 있는데 이럴 때는 큰 따옴표를 문자열을 만드는 기호로 사용하고 작은따옴표는 내부에서 자유롭게 쓸 수 있기 때문입니다.
반대로 작은따옴표를 문자열을 만드는 기호로 사용하고 큰 따옴표를 문자열 내부에서 자유롭게 사용할 수도 있습니다.
'I am not "human". ' 이런 식으로 말이죠.
1-5) 문자열 이란
우리가 앞서 배운 작은따옴표 혹은 큰 따옴표로 둘러싸여 있는 단어나, 문자 숫자들을 말합니다.
"" 이런 것도 빈 문자열이라 하고, "123" 이것도 문자열입니다.
"abcdef" 이것도 물론 문자열이죠.
이런 문자열로 우리는 많은 것을 할 수 있습니다.
2. 파이썬 문자열에서 쓰이는 이스케이프 코드
2-1) 이스케이프 코드란?
문자열 내부에서 특수하게 사용할 수 있도록 미리 약속으로 정해둔 코드를 말합니다.
\\ : 역슬래시 역슬래시
- 문자열 내부에서 역슬래시(\)를 표현할 때 사용합니다.
\' : 역슬래시 작은따옴표
- 문자열 내부에서 작은따옴표(')를 표현할 때 사용합니다.
\" : 역슬래시 큰 따옴표
- 문자여 내부에서 큰 따옴표(")를 표현할 때 사용합니다.
\n : 역슬래시 n
- 문자열 내부에서 개행을 할때 사용합니다
- 줄 바꿈 코드
\t : 역슬래시 t
- 문자열에서 간격을 줄 때 사용합니다.
- 탭 간격 줄 때 사용하는 코드
이외에도 다른 이스케이프 코드가 있는데 이것들은 잘 사용하지 않으니 따로 다루지 않겠습니다.
아래 예제에서 문자열 내부에 이스케이프 코드들의 동작을 확인해보겠습니다.
2-2) 문자열 안에 있는 이스케이프 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
print('1. 이스케이프 코드 \\ 역슬래시 예제')
s1 = "역슬래시는 \\ 이렇게 "
print(s1)
print('\n2. 이스케이프 코드 \' 작은따옴표 예제')
s2 = 'BlockDMask\'s python example'
print(s2)
print('\n3. 이스케이프 코드 \" 큰따옴표 예제')
s3 = "I don't know. \"python string\" abcdef"
print(s3)
print('\n4. 이스케이프 코드 \\n 개행 예제')
s4 = "김\n이\n박\n"
print(s4)
print('\n5. 이스케이프 코드 \\t 탭 예제')
s5 = "Block\tDMa\t\tsk"
print(s5)
|
cs |
이런식으로 문자열 사이에 이스케이프 코드 \n, \t, \\등을 사용하면 문자열을 이쁘게 만들 수 있습니다.
3. 파이썬 문자열 인덱싱과 슬라이싱
3-1) 문자열 인덱싱
문자열 인덱싱이란 문자열에 있는 요소 하나하나에 접근을 하는 방법을 말합니다.
문자열[index]
위와 같은 모양으로 문자열의 요소에 접근이 가능합니다.
문자열 보다 긴 범위는 인덱스로 접근이 당연하게도 불가능하겠죠?
문자열 "abcd"가 있으면 각각 위치마다 고유 번호가 존재합니다.
앞에서부터 순서대로 0번 1번 2번 3번입니다. 인덱스 번호는 0부터 시작합니다.
0번 인덱스로 접근이 가능한 문자는 'a'이고
1번 인덱스로 접근이 가능한 문자는 'b'이고
2번 인덱스로 접근이 가능한 문자는 'c'이고
3번 인덱스로 접근이 가능한 문자는 'd'입니다.
파이썬은 다른 언어와 다르게 음수로도 접근을 허용하는데요.
"abcd"가 존재하면 -4-3-2-1 입니다.
뒤에서부터 -1으로 시작됩니다.
-1번 인덱스로 접근이 가능한 문자는 'd'이고
-2번 인덱스로 접근이 가능한 문자는 'c'이고
-3번 인덱스로 접근이 가능한 문자는 'b'이고
-4번 인덱스로 접근이 가능한 문자는 'a'입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
s1 = "abcd"
print(f"s1 : {s1}")
print(f"s1[0] : {s1[0]}")
print(f"s1[1] : {s1[1]}")
print(f"s1[2] : {s1[2]}")
print(f"s1[3] : {s1[3]}")
# print(f"s1[4] : {s1[4]}") ERROR
print(f"s1[-1] : {s1[-1]}")
print(f"s1[-2] : {s1[-2]}")
print(f"s1[-3] : {s1[-3]}")
print(f"s1[-4] : {s1[-4]}")
# print(f"s1[-5] : {s1[-5]}") ERROR
|
cs |
이런식으로 문자열 "abcd"에 인덱스를 이용해서 문자 하나하나 접근을 해보았습니다.
자세히 보면 양수로는 0~3까지 접근이 가능하고, 음수로는 -1~-4까지만 접근이 가능합니다.
그 이후에는 문자열 길이를 넘기 때문에 인덱스를 통해서 문자열에 접근이 불가능합니다.
정리를 해보면 길이가 N인 문자열에서 인덱싱을 할 수 있는 범위는
양수 0 <= x < N 이고
음수 -N <= x <= -1 입니다.
합쳐서 보면 -N <= x < N 의 범위에서 인덱싱을 할 수 있습니다.
3-2) 문자열 슬라이싱
문자열 슬라이싱이란 문자열을 자른다는 의미입니다.
위에서 배운 인덱싱을 통해서 문자열을 자를 수 있습니다.
문자열[시작index : 끝index]
위와 같은 방법을 통해서 (시작 index)에서부터 (끝 index - 1)까지 문자열을 자를 수 있습니다.
예제로 바로 확인하시죠.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 문자열 슬라이싱 예제
s1 = "abcd"
print(f"s1 : {s1}")
print(f"s1[1:2] : {s1[1:2]}")
print(f"s1[0:3] : {s1[0:3]}")
print(f"s1[:3] : {s1[:3]}")
print(f"s1[1:] : {s1[1:]}")
print(f"s1[:] : {s1[:]}")
# 문자열 슬라이싱 응용
s2 = "blockdmask"
print(f"\ns2 : {s2}")
print(f'문자열 앞 : {s2[:3]}')
print(f'문자열 뒤 : {s2[4:]}')
s3 = s2[5:] + "123" + s2[0:5]
print(f"s3 : {s3}")
|
cs |
이렇게 문자열을 앞에서부터 뒤까지 자를 수 있습니다.
예제를 자세히 보면 문자열[앞 index:뒤 index] 모양에서 앞 index나 뒤 index부분이 빠진 게 보이죠?
이 부분을 빼게 되면 맨 앞에서부터~ 혹은 맨 뒤까지~를 뜻합니다.
문자열[ : 뒤 index]은 맨 앞에서부터 뒤 index까지를 말하고
문자열[앞 index : ]은 앞 index부터 문자열 맨 뒤까지를 말합니다.
문자열[ : ]은 문자열 맨 앞에서부터 맨 뒤 까지를 말합니다.
s2 번을 보면 문자열을 이쁘게 잘 반으로 나눈 걸 볼 수 있는데요
문자열[앞 index : 뒤 index]의 범위가 (앞 index~뒤 index-1)까지 이기 때문에
문자열[ :4], 문자열[4: ] 이렇게 같은 index를 이용하게 되면 문자열이 이쁘게 잘 잘릴 수 있습니다.
4. 파이썬 문자열 연결, 반복, 길이 구하기
4-1) 문자열 더하기 (문자열 연결)
파이썬에서 문자열과 문자열을 연결할 때는 문자열을 더하면 됩니다. 간단하죠?
1
2
3
4
5
6
7
8
9
10
11
|
s1 = "abc" + 'def'
print(f"s1: {s1}")
s2 = s1 + "123"
print(f"s2: {s2}")
s3 = '00'
s4 = "blog"
s5 = s3 + s4 + '\t' + s4 + s3
print(f"s5: {s5}")
|
cs |
이런 식으로 문자열 + 문자열을 하게 되면 새롭게 이어진 문자열이 생성됩니다.
4-2) 문자열 곱하기 (문자열 반복)
문자열 * N을 하면 해당 문자열을 N만큼 반복해서 이어진 문자열이 새로 생성이 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
s1 = "abc"
print(f"s1 : {s1}")
s2 = s1 * 5
print(f"s2 : {s2}")
s3 = "str" * 3
print(f"s3 : {s3}")
s4 = "zero" * 0
print(f"s4 : {s4}")
|
위 결과처럼 5번을 곱하면 문자열이 5번 반복해져서 나오게 됩니다.
예제 s4를 보게 되면 문자열에 0을 곱하면 당연히 0번이기 때문에 빈 문자열이 됩니다.
4-3) 문자열 길이 구하기
문자열 길이를 구하려면 파이썬의 내장 함수인 len을 사용하면 됩니다.
1
2
3
4
5
6
7
8
9
|
s1 = "this is python string"
print(s1)
print(len(s1))
print()
s2 = "12345"
print(s2)
print(len(s2))
|
cs |
이런 식으로 len(문자열)을 이용해서 문자열 길이를 구할 수 있습니다.
이상으로 파이썬 문자열 기본 편을 마치도록 하겠습니다.
다음 시간에는 문자열 관련 함수들에 대해서 알아보겠습니다.
감사합니다.
파이썬 문자열 관련 메서드, 함수가 궁금하신 분들은 [바로가기]
'<개인공부> > [Python]' 카테고리의 다른 글
[python] 파이썬 True, False 불(bool) 자료형 사용법 및 예제 총정리 (2) | 2021.01.08 |
---|---|
[python] 파이썬 출력 print 정리 및 예제 (0) | 2021.01.06 |
[python] 파이썬 입력 input 정리 및 예제 (1) | 2021.01.04 |
[python] 파이썬 문자열 String 메서드 정리 (count, find, upper, lower, strip, replace) (1) | 2021.01.01 |
[python] 파이썬 파일읽기, 파일쓰기 (open , close, write, read, tell, seek) (0) | 2020.12.23 |
[python] 파이썬 set (집합) 자료형 정리 및 예제 (0) | 2020.12.18 |
[python] 파이썬 딕셔너리(dictionary) 자료형 정리 및 예제 (3) | 2020.12.13 |
[python] 파이썬 튜플(tuple)에 대해서 (0) | 2020.12.06 |