[Python] 문자열 인덱싱&슬라이싱

David Kim·2022년 10월 20일
0

Python

목록 보기
2/11

문자열 인덱싱과 슬라이싱

인덱싱(indexing)은 무언가를 가르킨다 라는 의미고
슬라이싱(slicing)은 무언가를 잘라낸다 라는 의미다

ex) a = "I love cocktail, I like gimlet"

위 예제를 들어서 얘기를 하자면

I Love Cocktail,

0 1 2 3 4 5 6 7 8 9 (1)0 1 2 3 4 5 6

이런식으로 각 문장에 번호가 표기가 되는데 I는 첫 번째 자리이며
뜻하는 숫자는 0이다. 그런식으로 쭉 이어져 가면 된다. 그렇다면
다음 예제에서 만약 내가 이렇게 친다면

>>> a = "I love cocktail, I like gimlet"

이렇게 입력후 a[3]를 칠 경우 컴퓨터는 'o' 라고 나올텐데 이상하다?
띄어쓰기를 감안하더라도 3번째의 문자는 v가 나와야하는데 그 이유는 간단하다
파이썬은 숫자 0부터 카운터를 한다 즉 I(0) (1)L(2)o(3) 이렇게 된다.

여기서 재미난 사실을 하나 더 추가하자면 >>> a[-1] 이렇게 칠 경우
나오는 알파벳은 t가 나온다 어렵게 생각할거 없이 역주행한다 생각하면 될듯

그렇다면 저 문장에서 love 이라는 단어만 뽑아내려면 어떻게 해야할까?
귀찮지만 저번에 쓴 사칙연산을 이용해 철자 하나하나를 더해 뽑아 내는 방법도
있긴하지만 일일이 하나하나 쓰는 중노동은 피하고 싶다 그런 당신을 위한
방법이 바로 슬라이싱(slicing) 기법이 존재한다.

>>> a = "I love cocktail"
>>> a[2:6]
'love'

a[2:6] 이 코드를 해석을 하자면 "I love cocktail" 문장에서
2번 부터 6번까지 문자를 뽑아낸다 라는 뜻이다. 근데 여기서 이상한 점이
하나 있다 a[5]가 e인데 어째서 문자열은 6까지 포함할까? 만약 당신이
a[2:5]라고 치면 문자는 lov까지만 나올것이다 참으로 이상하다 왜지?
그 이유는 되게 간단하다 a[시작 번호: 끝 번호]를 지정할 떄 끝 번호에
해당하는 것은 포함하지 않기 떄문이다. a[2:5]를 수식을 표현하자면

2 <= a < 5

어렵게 생각 할 필요 없다 우리 예전 수학시간을 생각하면 참 쉽다. 저걸
풀어서 생각하면 a는 2이상 그리고 5미만 숫자만 포함된다는 말이니 즉
5번째 문자는 포함이 안되니 2, 3, 4 요렇게만 포함이 된다는 말이다.
고로 love를 표기하려면 a[2:6] 이렇게 해야한다. 참고로 띄어쓰기도
문자열에 포함이니 만약 a[1:6]을 할 경우 ' love'로 나온다. 당연한
말이겠지만 'love'와 ' love'는 엄연히 다른 문자열이다.

다른 방법으로 한 문장을 나타내고 싶다면? 역시 또한 방법이 있다.

>>> a[2:]
'love cocktail'

a[시작 번호:끝 번호] 여기서 끝 부분을 생략하면 입력한 시작 번호에서
자동적으로 그 문자열 끝번호까지 쭉 뽑아낸다. 반대로 끝 번호를 지정하고
시작 번호를 생략을 하면 지정한 끝 번호에서 맨 앞까지 쭉 뽑아낸다

>>> a[:15]
'I love cocktail'

그 외에도 시작 번호와 끝 번호를 생략하면 처음부터 끝까지 표기된다.

>>> a[:]
'I love cocktail'

슬라이싱에서도 마이너스(-) 기호를 사용 할 수 있다.

>>> a[:-9]
'I love'

위 코드는 a[:-9] 말하는 것은 0 부터 -10을 얘기 하는거다. 솔직히 난
좀 마니 헷갈렸는데 -9 포함은 아닙니다.

그럼 배운건 바로바로 써먹어야 의미가 있으니 예제를 한번 내보겠습니다.

>>> a = "20221031Halloween"
>>> date = a[:8]
>>> event = a[8:17]
>>> date 
'20221031'
>>> event
'Halloween'

짜잔 이렇게 응용 할 수 있지롱 date 같은 경우는 끝 번호가 8로 지정 했으니
8보다 적은 7번 문자열까지 나오고 event 같은 경우는 시작 번호가 8이니
8번째 문자에서 시작된거다. 여기서 좀더 세분화 시키려면

>>> a = "20221031Halloween"
>>> year = a[:4] (첨부터 3까지)
>>> day = a[4:8] (4에서 7까지)
>>> event = a[8:] (8에서 끝까지)
>>> year 
'2022'
>>> day
'1031'
>>> event
'Halloween'

자자 여기서 그렇다면 예를 들어 Vodca 문자열을 Vodka 라고 바꾸려면
어떻게 해야할까??? 참고로 Vodka(보드카)는 러시아에서 만든 증류주이다.

>>> a = "Vodca"
>>> a[:3] (0부터 2까지)
>>> a[4:] (4부터 끝인데 솔직히 [4]해도 된다. 어차피 a가 끝알파벳이라)
>>> a[:3] + 'k' + a[4:]
'Vodka'

요로코롬 Vodca를 다시 Vodka로 바꿀 수 있다 문자열을 나눠주고 그 사이
잘못된 알파벳을 사칙연산을 이용하여 Vodka 라는 새로운 문자열을 만들 수 있다.

아 이건 코딩이랑 전혀 상관 없는데 벨루가라는 보드카인데 진짜 존맛이다.

profile
people rarely succeed unless they have fun in what they are doing

0개의 댓글