숫자를 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
+를 사용해 문자열 "-" 와 슬라이싱을 합쳐서 쓸 수도 있다.
'IT > 파이썬3 공부' 카테고리의 다른 글
[파이썬 기초] 리스트 -2 연산과 함수사용 (0) | 2020.05.01 |
---|---|
[파이썬 기초] 리스트 -1 (자료형) 인덱싱과 슬라이싱 (0) | 2020.04.30 |
[파이썬 기초] 문자열 -3 (포매팅 2) (0) | 2020.04.28 |
[파이썬 기초] 문자열 -3 (포매팅 1) (0) | 2020.04.27 |
[파이썬 기초] 문자열 -1 (자료형) (0) | 2020.04.22 |
최근댓글