숫자를 0부터 세어라

>>> a = "Money makes money"

이 소스코드에 있는 문자열 "Money makes money"을 순서 매기려면 어떻게 해야 할까?

M o n e y   m a k   e s   m o n e y
1칸 2칸 3칸 4칸 5칸 6칸 7칸 8칸 9칸 10칸 11칸 12칸 13칸 14 15 16 17
0번 1번 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

먼저 위 문장의 칸 수를 세어보면 17칸을 잡아먹는 17글자 짜리 문장이다.

하지만 파이썬에서 이것을 순서 매길 때에는 1부터 시작하는 것이 아닌 0부터 시작하여 세야 한다.

공백도 한 자리 차지하기 때문에 공백에도 순위를 매긴다.

 


 

 

문자열 인덱싱

인덱싱(Indexing)은 색인, 즉 찝어오는 것이다.

>>> a = "Money makes money"

아까와 같은 코드에서 'makes'의 'm'만을 가져오는 방법이 있다.

 

 

>>> a[6]
'm'
M o n e y   m a k   e s   m o n e y
0번 1번 2 3 4 5 6번 7 8 9 10 11 12 13 14 15 16

문장을 0으로 시작해서 처음부터 셌을 때 'm'은 6번이니 

a[가져올 번호] 를 쓰면 원하는 문자만 빼올 수 있다.

파이썬 인터프리터에 a[숫자] 를 쳐서 무슨 문자를 찝어오는지 확인해 보자

 

또 문장을 뒤에서부터 세어 'makes'의 'm'만을 가져올 수도 있다.

M o n e y   m a k   e s   m o n e y
0번→ 1번 2 3 4 5 6번 7 8 9 10 11 12 13 14 15 16

0번←

-16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5번 -4번 -3번 -2번 -1번

0번은 항상 움직이지 않는다. 왜냐하면 0과 -0은 같기 때문에.

그러니 첫 글자는 0을 주고, 뒤에서부터 음수를 주어 차례대로 세면 된다.

 

>>> a[-11]
'm'

a[-11] 또한 a[6]과 같이 'makes'의 'm'만을 찝어 온다.

 

그럼 문자열에서 'makes'단어를 통째로 뽑아 오려면 어떻게 할까?

 

 


 

 

문자열 슬라이싱

>>> a = "Money makes money"
>>> a[6:11]
'makes'

a[6:11]이라고 쓰면 'makes'를 전부 가져온다. 허나 'm'이 6번, 단어의 마지막인 's'가 10번인데

왜 a[6:11]을 사용했냐고 하면,

슬라이싱을 할 때에는 a[시작번호 부터 : ~~ 미만 까지] 를 사용한다.

이해를 돕기 위한 표

M o n e y   m a k   e s   m o n e y
0번→ 1번 2 3 4 5 6번 7번 8번 9번 10번 11번 12 13 14 15 16
            부터         미만까지          
            O O O O O X          

6번부터 10번까지 찝어오세요~ 하지 말고

6번부터 11미만까지 가져오세요~ 라고 지시하여야 한다.

거기에 11번은 당연히 포함하지 않는다.

조금 헷갈릴 수 있지만 슬라이싱을 할 때는 [시작번호:끝번호+1] 무조건 가져오고 싶은 문자번호보다 1 더 세어 가져온다고 생각하면 쉽다.

 

 

그럼 첫 단어인 'Money'와 끝 단어 'money'를 가져오려면 뭐라고 써야 할까?

>>> a = "Money makes money"

>>> a[0:5]   #a의 0번부터 4번까지(5미만까지) 가져오세요.
'Money'
>>> a[:5]    #a의 처음부터 4번까지(5미만까지) 가져오세요.
'Money'

>>> a[12:17]    #a의 12번부터 16번까지(17미만까지) 가져오세요.
'money'
>>> a[12:]     #a의 12번부터 끝까지 가져요세요.
'money'

# 은 주석처리

마찬가지로 변수[시작번호 부터 : ~~미만까지 ] 라고 지시하는데 

해당하는 자리에 아무것도 써넣지 않으면 처음부터 또는 끝까지 라고 인식한다.

그러니  a[ : ] a[처음부터:끝까지]라는 뜻으로 문자열 전체를 가져온다.

 


 

 

인덱싱, 슬라이싱 또한 변수에 대입 가능하다.

>>> info = "9012341122334김땡땡01012345678"
>>> name = info[13:16]
>>> rrn = info[:13]
>>> phone = info[16:]

>>> print(name)
김땡땡
>>> print(rrn)
9012341122334
>>> print(phone)
01012345678

info에 마구잡이로 들어있는 정보를 name, rrn, phone으로 나눠주었다.

하지만 print()로 출력을 해보면 아직까지 보기 흉하다.

더 보기좋게 고쳐보자

 

>>> info = "9012341122334김땡땡01012345678"
>>> name = info[13:16]
>>> rrn = info[:6] + "-" + info[6:13]
>>> phone = info[16:19] + "-" + info[19:23] + "-" + info[23:]

>>> print(name)
김땡땡
>>> print(rrn)
901234-1122334
>>> print(phone)
010-1234-5678

+를 사용해 문자열 "-" 와 슬라이싱을 합쳐서 쓸 수도 있다.

 

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