문자열을 만드는 방법 4가지
'Hello World'
"Hello World"
'''Hello World'''
"""Hello World"""
'''과 """은 주석으로만 쓰이는 줄 알았는데 아니었다.
변수에 넣어주면 문자열이 되고, 그렇지 않으면 주석으로 처리되는 것 같다.
문자열이 여러 줄인 경우 사용하면 된다.
s1과 s3은 문자열로 처리, 7~9번째 줄은 주석으로 처리되었다.
참고로 파이썬은 들여쓰기에 민감하기 때문에 함수 내부에서 주석을 사용할 때는 주석도 들여쓰기를 해줘야 한다.
문자열 연산
문자열끼리 덧셈과 곱셈이 가능하다.
덧셈은 문자열을 이어서 출력하고, 곱셈은 곱한 수 만큼 출력해준다.
[문자열 덧셈]
s1 = "Hello World! "
s2 = "My name is Python! "
print(s1+s2)
print(s1+s1)
print(s1+"String Test")
여러 번 덧셈하는 것도 가능하고, 변수가 아닌 문자열을 덧셈하는 것도 가능하다.
문자열과 상수를 덧셈하는 것은 불가능하다. (s1+3)
[문자열 곱셈]
s1 = '''Hello World! '''
s2 = "My name is Python! "
print(s1*3)
print(s2*4)
문자열끼리의 곱셈은 안 된다. (s1*s2)
문자열 길이 세기 - len()
len은 문자열의 길이를 세는 함수다. (공백 포함)
사용방법: len(변수명)
s1 = '''Hello World! '''
s2 = "My name is Python! "
print("s1의 길이 : ", len(s1))
print("s2의 길이 : ", len(s2))
s1의 길이는 13이다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
H | e | l | l | o | W | o | r | l | d | ! |
문자열 개수 세기 - count()
count는 특정한 문자열의 개수를 센다.
사용방법: 변수명.count("찾고자 하는 문자열")
s1 = 'Hello World! '
s2 = "yes yes yes very yes"
print("Hello의 개수 : ", s1.count('Hello'))
print("yes의 개수 : ", s2.count("yes"))
공백의 개수를 세는 것도 가능하다.
문자열 인덱싱 (Indexing), 슬라이싱 (Slicing)
인덱싱을 사용해 문자열의 특정 부분을 가져올 수 있다.
인덱싱은 0부터 시작한다. "Hello World! " 문자열의 경우 0~12까지의 인덱스를 가지고 있다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
-13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
H | e | l | l | o | W | o | r | l | d | ! |
s1 = "Hello World! "라고 했을 때, s1[0]과 같은 방법으로 사용할 수 있는데, s1[0]은 s1의 가장 첫번째 문자인
'H'를 의미한다. n번째와 인덱스 n을 헷갈리지 말자. 보통 n번째를 가리키는 경우 인덱스는 n-1이다. (예: 5번째 문자를 찾고 싶을 경우 s1[4] = 'o')
인덱스는 마이너스 부호도 가능하다. s1[-1]은 s1[12]와 같은 값을 의미한다. 즉, -는 문자열을 끝값부터 가리킨다. s1[-1] = s1[12], s1[-2] = s1[11] ···.
또한 슬라이싱 기법을 이용하면 문자열의 특정 부분을 가져올 수 있다.
'Hello World! '에서 'Hello'만 뽑아 오고 싶다면 s1[0:5]로 표현할 수 있다. 0:5에서 5는 포함하지 않아 실제로는 0,1,2,3,4 부분을 가져온다.
print("문자열 인덱싱: ", s1[0], s1[3], s1[-3], s1[-5])
#문자열 슬라이싱
print("문자열 슬라이싱: ", s1[3:8]) # 인덱스 3~7까지 가져옴
print("Hello World!에서 Hello만 가져오기: ", s1[0:5])
print("인덱스 4부터 끝까지 출력하기: ", s1[4:]) # 인덱스 4부터 끝까지 가져옴
마이너스 기호를 포함한 인덱싱을 살펴보자.
필자는 처음에 +와 - 기호가 혼합된 슬라이싱 기법이 어떻게 이루어지는지 이해가 안 됐는데, 아래 표처럼 +든 -든 각 위치로 확인하면 간단할 것 같다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
-13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
H | e | l | l | o | W | o | r | l | d | ! |
예를 들어, s1[7:-3]으로 슬라이싱을 한다고 치자.
필자는 처음에 슬라이싱이 7,8,9,10 ··· -6, -5, -4 이렇게 이루어지는 줄 알아 이해가 안 되었다.
그런데 생각해보면 위처럼 슬라이싱을 하게 될 경우 문자열이 겹쳐버린다.
orld! Hello Worl <- 이렇게 출력이 될 것이다.
하지만 실제로는 orl <- 이렇게 출력이 된다. 그냥 -4 위치까지 슬라이싱이 된 것이다. 값 자체만 보자면 s1[7:10] 결과와 똑같다. 그러니까 s1[7:-12] 이런 값을 출력해보면 값이 안 나온다. 거꾸로 가져오지 않는 이상은 말이다.
슬라이싱은 값을 거꾸로 가져오거나 건너뛰어서 가져오는 것도 가능하다.
변수명[시작번호:끝번호:슬라이싱 단위]
-1로 하면 거꾸로 가져올 수 있는데, 아까처럼 s1[7:-12]는 출력이 안 되지만 s1[7:-12:-1]은 7부터 -11까지 슬라이싱하기 때문에 출력이 가능하다. 슬라이싱은 그냥 해당 인덱스 번호까지 앞뒤 방향을 잘라오는 걸로 이해하면 된다.
print("마이너스 값을 포함한 슬라이싱: ", s1[-7:])
print("마이너스 값을 포함한 슬라이싱: ", s1[-11:-2])
print("마이너스 값을 포함한 슬라이싱: ", s1[7:-3])
print("마이너스 값을 포함한 슬라이싱: ", s1[7:-12:-1])
print("증가폭이 2인 슬라이싱: ", s1[1:12:2])
[참고자료]
점프 투 파이썬 - 02장 파이썬 프로그래밍의 기초, 자료형 - 02-2 문자열 자료형
'Python' 카테고리의 다른 글
[Python] WinError 10061 ConnectionRefusedError (0) | 2023.02.07 |
---|---|
[Python] 소수 출력하기 (리스트 사용) (0) | 2022.06.13 |
[Python] 리스트 선언, 삽입, 제거, 조회 (0) | 2022.05.19 |