인덱싱(indexing)은 무언가를 가르킨다 라는 의미고
슬라이싱(slicing)은 무언가를 잘라낸다 라는 의미다
ex) a = "I love cocktail, I like gimlet"
위 예제를 들어서 얘기를 하자면
이런식으로 각 문장에 번호가 표기가 되는데 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 라는 새로운 문자열을 만들 수 있다.
아 이건 코딩이랑 전혀 상관 없는데 벨루가라는 보드카인데 진짜 존맛이다.