반응형

파이썬에서는 문자열 슬라이싱을 이용하여 아주 쉽게 문자열을 다룰 수 있습니다. 문자열 슬라이싱을 알아보기 전에 간단한 문자열 인덱싱을 먼저 알아보고 가도록하겠습니다. 

문자열 인덱싱( Indexing )

파이썬에서는 문자열에서 '특정 문자'를 가져올 수 있는 인덱싱이 존재한다.

문자열의 각 문자는 인덱스[index]라고 불리는 위치를 가지게 된다. 인덱스는 [0]부터 시작한다. 

test = "soo peach"
print(len(test)) # 9 / 공백도 문자열에 포함되기 때문

 "soo peach"라는 문자열을 할당 받은 test라는 변수는 공백을 포함하여 길이가 9인 문자열이다. 위에서 말했듯이 인덱스는 [0]부터 시작한다 그렇다면 두번째 o와 p사이에 있는 공백은 몇번째 인덱스 일까? 앞에서 부터 4번째이기 때문에 [4]가 아니라 [3]이다.

특정 인덱스의 문자열을 가져오고 싶다면 문자열을 가진 변수(test) 뒤에 [인덱스 번호]를 붙이는 것으로 그 인덱스에 있는 문자를 가져올 수 있다.

test = "indexing"
print(test[4]) # x 출력

 test에서 x만 추출하고 싶다면 x의 인덱스값인 4를 test뒤에 붙여주면 추출할 수 있다.

test = "indexing"
print(len(test)) # 8 출력
print(test[0]) # 'i' 출력
print(test[8]) # IndexError: string index out of range 에러 발생 
print(test[7]) # 'g' 출력

 첫번째 값인 i를 추출하기 위해서 test[0]을 하여 성공적으로 i를 추출할 수 있었다. 마지막 값인 g를 추출하기 위하여 문자열의 길이를 인덱스 위치로 지정하여 값을 추출하려했더니 인덱스 에러가 발생한다. 인덱스가 0부터 시작되기 때문에 마지막 인덱스는 문자열의 길이 -1 이다.

test = "indexing"
print(test[7]) # 'g' 출력
print(test[-1]) # 'g' 출력
print(test[-8]) # 'i' 출력
print(test[-9]) # IndexError: string index out of range 에러 발생

 간단하게 마지막 인덱스에 있는 문자를 추출해내는 방법도 있다. 음수 인덱스도 지원하기 때문인데 마지막 인덱스는 [-1] 부터 시작하고 왼쪽으로 갈수록 -2, -3... 과 같은식으로 된다. 음수 인덱스 또한 인덱스 범위를 벗어나면 인덱스 에러가 발생한다.


문자열 슬라이싱( Slicing )

 파이썬에서는 문자열 인덱싱과 같이 문자열 내에서 '특정 문자'만 가져오는 것이 아닌 "특정 문자열"을 가져오는 슬라이싱 또한 존재한다. [0]부터 시작하는 인덱스의 위치와 헷갈리지 않도록 문자를 첫번째부터 세지 않고 0번째 부터 세도록 예시를 들겠다.

test = "Slicing"
print(test) # Slicing 출력

# 0번째 문자부터 3번째 문자까지 슬라이싱
test_Slicing = test[0:4]
print(test_Slicing) # Slic 출력

 파이썬에서 문자열 슬라이싱은 []안에 :을 사용하여 구할 수 있다. 위의 코드에서 

test_Slicing = test[0:4]

부분은 test_Slicing에 test에서 0번째 인덱스부터 3번째 인덱스까지(총 4개의 인덱스) 슬라이싱을 한다는 의미이다.

[ : ] 에서 :의 앞부분은 문자열의 첫 인덱스, 뒷부분은 마지막 인덱스 +1을 의미한다. 위에 예시 처럼 [0 : 4]은 0부터 4까지의 인덱스가 아니라 0부터 3까지의 인덱스(0, 1, 2, 3)의 문자들을 가져온다는 뜻이다! : 의 뒷부분에 쓰여있는 수 -1 인덱스까지 슬라이싱 한다고 생각하면 된다.

 :을 기준으로 앞부분은 시작 인덱스 / 뒷부분은 슬라이싱할 마지막 인덱스 + 1 을 나타내기 때문에 헷갈리지 않도록 주의가 필요하다.

slice[0:4] 는 0번째 인덱스부터 (4-1)인 3번째 인덱스까지 슬라이싱을 하겠다는 뜻
test = "Slicing"
print(test) # Slicing 출력

# 2번째 문자부터 6번째 문자까지 슬라이싱
test_Slicing = test[2:7]
print(test_Slicing) # icing 출력

 문자열 슬라이싱을 사용할 때 반드시 0번째 인덱스부터 시작하지 않아도 된다.

test = "Slicing"
print(test) # Slicing 출력

# 4번째 문자부터 마지막 문자까지 슬라이싱
test_Slicing = test[4:]
print(test_Slicing) # ing 출력

# 0번째 문자부터 5번째 문자까지 슬라이싱
test_Slicing = test[:5]
print(test_Slicing) # Slici 출력

 또한 위의 코드와 같이 : 의 뒷부분을 생략해주면 : 의 앞부분 인덱스부터 끝까지 슬라이싱을 하고 : 의 앞부분을 생략해주면 0번째 문자부터 : 의 뒷부분 인덱스 -1까지 슬라이싱을 해준다.

test = "Slicing"
print(test) # Slicing 출력

# 0번째 문자부터 마지막 문자까지 슬라이싱
test_Slicing = test[:]
print(test_Slicing) # Slicing 출력

: 의 앞, 뒤를 다 생략하면 0번째 인덱스부터 마지막 인덱스까지 그대로 슬라이싱해 올 수 있다.

test = "Slicing"
print(test) # Slicing 출력

# 3번째 문자만 슬라이싱(인덱싱과 동일)
test_Slicing = test[3:4]
print(test_Slicing) # c 출력

 이처럼 한칸의 인덱스만 슬라이싱하여 인덱싱처럼 사용도 가능하다. 

test = "Slicing"
print(test) # Slicing 출력

# 0번째 문자부터 뒤에서 1번째 문자까지 슬라이싱
test_Slicing = test[:-1]
print(test_Slicing) # Slicin 출력

# 0번째 문자부터 뒤에서 4번째문자까지 슬라이싱
test_Slicing = test[0:-4]
print(test_Slicing) # Sli 출력

 문자열 슬라이싱 또한 문자열 인덱싱과 같이 음수로 사용도 가능하다. :의 뒷부분을 -1로하면 뒤에서부터 1번째 문자까지 슬라이싱한다는 의미이다.(0번째부터 세기 때문에 두번째 예제에서는 뒤에서 0번째 문자인 g는 슬라이싱 되지않았음)

test = "Slicing"
print(test) # Slicing 출력

# 1번째 문자부터 5번째 문자까지 슬라이싱
test_Slicing = test[1:6]
print(test_Slicing) # licin 출력

# 1번째 문자부터 5번째 문자까지 슬라이싱
test_Slicing = test[1:6:1]
print(test_Slicing) # licin 출력

# 1번째 문자부터 5번째 문자까지 2개씩 이동하며 슬라이싱
test_Slicing = test[1:6:2]
print(test_Slicing) # lcn 출력

# 1번째 문자부터 5번째 문자까지 3개씩 이동하며 슬라이싱
test_Slicing = test[1:6:3]
print(test_Slicing) # li 출력

앞서 배웠던 [ : ] 형태에 조금 응용을 하여 [ : : ]형식으로도 사용 가능하다 두번째 : 뒤에 오는 숫자는 슬라이싱의 단위 이다. [ : ]의 형태처럼 사용하면 기본적으로 1칸씩 슬라이싱([ : : 1]) 하도록 되어있는데 [ : : 2]처럼 슬라이싱 단위를 지정하여 주면 2를 슬라이싱 단위(1칸씩 건너뛰며)로 슬라이싱을 해준다.

test = "Slicing"
print(test) # Slicing 출력

# 0번째 문자부터 마지막 문자까지 뒤에서부터 슬라이싱
# == 마지막 문자부터 0번째 문자까지 슬라이싱
test_Slicing = test[::-1]
print(test_Slicing) # gnicilS 출력

 이러한 슬라이싱의 특성을 활용하여 파이썬에서는 아주 간단하게 문자열을 거꾸로 뒤집을 수 있다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기