파이썬 독학/입문 강의

[파이썬독학강의] 5.3 파이썬 문자열 인덱싱(indexing)과 슬라이싱(slicing)

데니 by danny 2023. 1. 28. 13:59
반응형

파이썬 문자열 슬라이싱과 인덱싱
파이썬 문자열 슬라이싱과 인덱싱

 

님들, 안녕하세요. 14년차 IT 개발자 데니예요. 지난 시간에는 파이썬 문자열에 대한 기본 개념과 사용법에 대해서 살펴보았어요. 이번 시간에는 문자열 인덱싱(Indexing)과 슬라이싱(Slicing)에 대해 배우실 거예요. 파이썬 문자열은 내부 문자마다 자체 순번이 있고, 그 순번을 사용하여 문자열 중 필요한 문자만 잘라서 사용할 수 있어요. 매우 간단한 개념이라고 생각하실 수 있지만,  해당 기능으로 인해 매우 간결하고 가독성 높은 소스코드를 빠르게 작성하실 수 있어요. 그럼 시작해 볼게요.

 

 

 

 

5.3 파이썬 문자열 인덱싱(indexing)과 슬라이싱(slicing)

  ▶ 문자열 인덱싱(Indexing)

네이버 이미지 검색어로 인덱스를 검색하면, 아래 그림처럼 알록달록한 포스트잇 플래그가 나옵니다. 여러분도 인덱스 하면 아래 그림과 같은 이미지가 머릿속에 떠오르시나요? 저는 하드커버로 만들어진 두꺼운 전공 서적의 마지막 페이지쯤에 나오는 인덱스가 생각나네요. 그리고 오픈북 시험이 있는 날이면 포스트잇 플래그로 전공서적 페이지마다 인덱싱 작업을 해야 했어요.  그래야 시험 제한 시간 내에 모든 문제를 풀 수 있었으니까요. 

네이버 이미지 검색 인덱스
출처 : 네이버 이미지 검색어 : 인덱스

 

 

님들께서 파이썬 문자열을 사용하실 때는 따로 인덱싱 작업을 하실 필요가 없어요. 문자열 변수를 선언하시고, 원하시는 문자열을 해당 변수에 대입하시는 순간 똑똑한 파이썬이 자동으로 문자마다 순번을 매겨줄 거예요. 순번은 0부터 시작에서 좌에서 우측으로 글자마다 1씩 더해져서 매겨져요. 예를 들어볼게요.

파이썬 IDLE 쉘에서 변수명 str6를 선언하고, 'Life is too short, you need Python' 문자열을 대입했어요.

파이썬 문자열
파이썬 변수 선언 및 문자열 대입

 

 

변수에 문자열을 대입하시고 엔터를 치시면 아무 일도 일어나지 않은 거처럼 보이지만, 파이썬은 아래 그림처럼 자동으로 문자열의 첫 번째 문자인 'L'부터 마지막 문자인 'n'까지 0부터 시작해서 33까지 순번을 매겨줘요.

파이썬 문자열 인덱싱
파이썬 문자열 인덱싱(indexing)

 

 

그럼 우리는 파이썬이 매겨준 순번을 사용해서 문자열 내에 문자에 접근할 수 있어요. 파이썬 IDLE 쉘 창에 아래 그림처럼 문자열변수명[순번]을 입력하시고 엔터를 치시면 님들이 대입하신 문자열의 해당 순번을 가진 문자가 출력될 거예요. str6[0]은 변수명 str6에 대입한 문자열 'Life is too short, you need Python' 내에서 순번 0인 문자 'L'에 접근하는 소스코드예요. str6[33]은 해당 문자열 내에 순번 33번인 'n'에 접근하는 소스코드예요.

파이썬 문자일 인덱싱

 

 

 

파이썬은 똑똑해서 문자열 뒤에서부터 순번을 매겨주기도 해요. 문자열 맨 뒤에서부터 순번을 매기는 경우, 마지막 문자인 'n'은 -1부터 시작해서 시작 문자인 'L'은 -34가 돼요.

파이썬 문자열 인덱싱 역순번
파이썬 문자열 인덱싱 역순번

 

 

이번에는 문자열변수명[-순번]을 입력하고 엔터를 치시면 해당 순번에 맞는 문자가 출력될거예요. 아래 그림 라인[2]번은 str6 문자열 변수에 순번 -1의 문자에 접근하고 있어요. 문자열 순번 -1은 마지막 문자이므로 'n'이 출력돼요.

라인[4]는 문자열 순번 -5인 문자에 접근하므로, 'y'가 출력돼요.

파이썬 문자일 인덱싱 역순
파이썬 문자일 인덱싱 역순번

 

 

 

  ▶ 문자열 슬라이싱(Slicing)

저는 슬라이싱(slicing)하면 잘린 오이가 생각나서 아래 이미지를 올려보았어요. 음식에 따라서 슬라이싱 두께를 조절할 수 있어요. 피부 미용을 위해선 얇게 슬라이싱한 오이를 사용하는 게 좋고, 오이 무침인 경우 아삭한 맛을 위해서 입 맛에 맞게 적당한 두께로 슬라이싱하는게 좋아요. 

파이썬 문자열도 오이처럼 두께(길이)를 조절해 가면서 슬라이싱하실 수 있어요. 문자열 슬라이싱에는 당연히 칼은 필요 없고, 위에서 배운 인덱싱(indexing) 사용이 필요해요.

오이 슬라이싱
오이 슬라이싱

 

 

 

아래 그림은 실습창에서 문자열 'Life is too short, you need Python'을 str7변수에 대입하였어요. 파이썬이 자동으로 해당 문자열에 순번을 매겼을 거예요. 우리는 해당 문자열에서 'Life'라는 문자열만 추출하고 싶다면 어떻게 해야 할까요? 실습창에 단 한 줄만 입력하시면 돼요. 실습창에 str7[0:4]를 입력하고 엔터를 쳐보세요. 아래 그림 라인[3]에서처럼 'LIfe'가 출력될 거예요. 

 슬라이싱 방법은 문자열변수명[시작번호:끝번호]를 입력하시면 돼요. 여기서 시작번호는 슬라이싱하여 추출하고자 하시는 문자열의 문자 순번이에요. 우리는 'Life'를 추출하고자 하였으니, 문자 'L'의 순번인 0을 입력하시면 돼요. 끝번호는 4를 입력하셔야 해요. 여기서 주의하셔야 할 점은 'Life'의 문자 'e'까지 출력하고 싶다고 하셔서  문자 'e'의 순번 3을 입력하시면 안 돼요. 문자 'e'까지 출력하고 싶으시면 문자 'e'의 순번 3에 1을 더해서 4를 입력하셔야 해요.

파이썬 문자열 슬라이싱
파이썬 문자열 슬라이싱

 

위 그림 라인[4]를 보시면 인덱싱을 통해 각 문자에 접근하고 있어요. 인덱싱을 통하여 문자열 'Life'를 추출하고자 하실 때에는 각 문자의 순번으로 접근하여 이전 시간에 배우신 더하기 연산을 하시면 라인[5]처럼 'Life'가 출력될 거예요. 하지만 슬라이싱에서는 문자열변수명[시작번호:끝번호]에서 시작번호는 포함하지만, 끝번호는 미포함이므로 +1해주셔야 한다는 점을 꼭 유의하여 코딩해주셔야 합니다.

 

 

 

문자열 슬라이싱(slicing) 하실 때, 시작번호는 반드시 순번 0이 아니어도 돼요. 파이썬 문자열 슬라이싱의 목적은 프로그래머가 문자열 변수에서 원하는 문자열을 추출하기 위함이에요. 그러므로 우리가 아래 소스코드 라인[1] 문자열 변수에서 'short'라는 문자열만 추출해내고 싶다면 라인[2]처럼 str8[12:17]을 입력하시면 돼요. 마찬가지로 'you'라는 문자열만 필요하시다면 라인[4]처럼 str8[19:22]를 입력하여 사용하시면 돼요.

1
2
3
4
5
>>> str8 = 'Life is too short, you need Python'
>>> str8[12:17]
>>> 'short'
>>> str8[19:22]
>>> 'you'
cs

 

 

 

문자열변수[시작번호:끝번호]에서 시작번호를 생략하셔도 돼요. 시작번호를 생략하시면, 파이썬이 자동으로 0을 시작번호에 입력해서 문자열 슬라이싱을 해줘요. 아래 소스코드 라인[2]처럼 str8[:17]을 입력하면 시작번호에 0이 자동 입력되어 'Life is too short'가 출력되어요.

1
2
3
>>> str9 = 'Life is too short, you need Python'
>>> str9[:17]
'Life is too short'
cs

 

 

 

마찬가지로 문자열변수[시작번호:끝번호]에서 번호를 생략하셔도 돼요.  끝번호를 생략하시면, 파이썬이 자동으로 문자열 끝까지 출력해 주어요. 아래 그림 참고해 주세요.

1
2
3
>>> str10 = 'Life is too short, you need Python'
>>> str11[19:]
'you need Python'
cs

 

 

 

 문자열변수[시작번호:끝번호]에서 시작번호와 번호 모두 생략하셔도 돼요.  라인[2]처럼 str12[:] 시작번호와 끝번호 모두 생략하시면 str12 변수에 대입된 문자열 전체가 출력돼요.

1
2
3
>>> str12 = 'Life is too short, you need Python'
>>> str12[:]
'Life is too short, you need Python'
cs

 

 

 

마이너스(-) 순번을 사용해서 문자열 슬라이싱을 할 수 있어요. 아래 소스코드에서 str13 변수 문자열에서 'need'를 추출하고 싶다면 어떻게 해야 할까요? 지금까지 여러분이 배우신 내용으로 문자열 슬라이싱을 한다면 라인[2]처럼 시작번호 23, 끝번호 27을 입력하시고 슬라이싱을 하실 거예요. 정배열 순서의 문자열 인덱싱을 사용하여 슬라이싱을 했다면,  라인[4]는 역배열 순서의 문자열 인덱싱 사용해서 슬라이싱을 해보았어요. 시작번호는 23번이고 끝번호는 문자열 맨뒤에서 7번째인 -7를 입력했어요. 결과는 동일하게 'need' 가 출력될 거예요.

1
2
3
4
5
>>> str13 = 'Life is too short, you need Python'
>>> str13[23:27]
'need'
>>> str13[23:-7]
'need'
cs

 

님들 오늘 여기까지 완독 하시느냐고 정말 수고하셨어요. 오늘 님들은 파이썬 문자열 인덱싱과 슬라이싱에 대한 개념과 사용법을 배우신 거예요. 처음 말씀드린 것처럼 간단한 개념이지만, 단 한 줄로 우리가 원하는 문자나 문자열을 추출해서 사용할 수 있어요. 즉, 1개의 문자열 변수를 가지고 다수의 문자나 문자열을 추출해서 사용하므로 새롭게 문자열 변수를 선언하고 대입하실 필요가 없어서 문자열 재사용 측면에서 아주 좋은 기능예요. 오늘 학습하신 내용 꼭 반복해서 실습해 보시길 권유드릴게요. 감사해요.

반응형