일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- burpsuite
- root로그인안됨
- 패키지 출력
- uptime -s
- svn: Can't find a temporary directory: Internal error
- histoy옵션
- uptime -V
- uptime -p
- 장치에 남은 공간이 없음
- ln -Tfs
- Unable to create a new virtual machine: No permission to perform this operation.
- HISTTIMEFORMAT
- AWS 시험후기
- aws 자격증 접수 오류
- pam_tally2.so
- 리눅스 telnet
- CentOS-Base.repo
- AWS
- 모바엑스텀 설치
- i-node full
- Default vpc
- 프리티어 비용 발생
- pam_tally -u
- Default 생성
- rm -f
- 버프슈트
- 버프스위트
- pam_tally -u -r
- Default 삭제
- Burp Suite
- Yesterday
- Today
- Total
1. 파이썬(Python) 문자열2(인덱싱,슬라이싱,포매팅,함수) 본문
4. 문자열 인덱싱 및 슬라이싱
- 인덱싱(Indexing)이란 무엇인가를 ‘가르킨다’라는 의미입니다.
- 슬라이싱(Slicing)이란 무엇인가를 ‘잘라낸다’라는 의미입니다.
4_1. 문자열 인덱싱이란?
>>> string = ‘Hello world’
위 소스 코드에서 변수 string에 저장한 문자열의 각 문자마다 번호를 매겨 보면 다음과 같습니다.
H | e | l | l | o |
| w | o | r | l | d |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
아래 소스 코드를 실행하면 ‘11’이라는 값이 반환됩니다.
>>> string = ‘Hello world’
>>> len(string)
11
위 표는 10이라고 나왔는데 왜 11이지 라고 생각할 수 있는데 위에 표는 0부터 시작합니다. 그래서 0부터 10까지를 세어보면 11이 나옵니다. 근데 문자는 10개인데 왜 11개의 글자로 구성되어있는지 궁금할 수 있습니다. ‘hello’와 ‘world’라는 단어 사이에 있는 공백도 문자로 간주하기 때문입니다. 위 소스 코드에서 len()은 함수이고 length의 줄임말입니다. 즉, 문자열의 길이를 측정하는 함수 입니다.
4_2. 문자열 인덱싱 활용하기
>>> string = 'Hello world'
>>> len(string)
11
>>> string[0]
'H'
>>> string[1]
'e'
>>> string[5]
' '
>>> string[-1]
'd’
앞의 string[0]과 string[1]과 string[5]는 쉽게 이해 할 수 있는데 마지막 string[-1]이 뜻하는 것은 무엇일까요? 문자열을 뒤에서부터 읽기 위해서 마이너스(-) 기호를 붙인 것입니다.
string[12]와 string[-12]을 입력하면 어떡해 될까요?
>>> string[-12]
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
string[-12]
IndexError: string index out of range
>>> string[12]
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
string[12]
IndexError: string index out of range
12와 –12에는 문자가 없기 때문에 에러를 발생 시킵니다.
4_3. 문자열 슬라이싱이란?
문자열에서 단순히 한 문자만을 뽑아내는 것이 아니라 ‘hello’ 또는 ‘world’같은 단어들을 뽑아내는 방법은 없을까요?
첫 번째 방법
>>> a = 'Hello world'
>>> b = a[0] + a[1] + a[2] + a[3] + a[4]
>>> b
'Hello'
첫 번째 방법처럼 단순하게 접근할 수도 있지만 파이썬 에서는 더 좋은 방법을 제공합니다.
두 번째 방법(슬라이싱 기법)
>>> a = 'Hello world'
>>> a[0:5]
'Hello’
a[0:5]가 뜻하는 것은 a라는 문자열(문장)에서 0부터 5까지의 문자를 뽑아낸다(잘라낸다)라는 뜻입니다. a[0] ~ a[4]까지 합치면 hello니까 a[0:4]로도 ‘Hello’라는 단어를 추출할 수 있다고 생각 됩니다. 아래의 예를 보면
>>> a = "Hello world"
>>> a[0:4]
'Hell’
이렇게 되는 이유는 a[시작 번호:끝 번호]를 지정하면 끝 번호에 해당하는 것은 포함되지 않습니다.
즉, a[0:4]를 수식으로 나타내면 다음과 같습니다.
0 <= a < 4
이 수식을 만족하는 a는 a[0], a[1], a[2], a[3]입니다. 따라서 a[0:4]은 ‘Hell’이고 a[0:5]는 ‘Hello’가 되는 것입니다.
4_4. 문자열 슬라이싱 활용하기
>>> a[0:6]
'Hello '
위의 예는 a[0] + a[1] + a[2] + a[3] + a[4] + a[5]와 같습니다. a[5]는 공백 문자이기 때문에 ‘Hello ’가 출력되는 것입니다. 공백 문자도 일반 문자와 동일하게 취급되는 것을 알아 둬야 합니다. ‘Hello’와 ‘Hello ’는 다른 문자열입니다.
슬라이싱은 항상 시작 번호가 ‘0’일 필요는 없습니다.
>>> a[0:4]
'Hell’
>>> a[2:4]
'll'
>>> a[6:8]
'wo'
a = ‘Hello world’변수를 통해 ‘world’만 추출하려면 어떻게 해야 될까요?
>>> a[6:11]
‘world’
위 코드의 문제점은 마지막 글자의 위치까지 번호 세기가 귀찮다는 것입니다. 이러한 단점을 보안하기 위해서 파이썬의 슬라이싱에서는 시작 번호 또는 끝 번호을 생략하면 알아서 해당 문자열의 시작과 끝을 의미하게 할 수 있습니다.
>>> a[6:]
'world'
>>> a[:6]
'Hello '
>>> a[0:]
'Hello world'
>>> a[:11]
'Hello world'
a[시작번호:끝번호]에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지 값을 가져올 수 있습니다.
>>> a[:]
'Hello world’
슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있습니다.
>>> a = 'Hello world '
>>> a[6:-1]
'world'
>>> a[6:-2]
'worl'
>>> a[6:-3]
'wor'
>>> a[6:-4]
'wo'
>>> a[6:-5]
'w'
>>> a[6:-6]
''
인덱스의 값이 음수인 경우에는 문자열의 뒤쪽부터 역순으로 글자를 셉니다. a[6:-1]이 뜻하는 것은 a[6]에서부터 a[-2]까지를 말합니다. a[-1]은 포함시키지 않습니다. -1에 –1을 한 번 더 추가한다고 생각 하는 게 낫습니다.
5. 문자열 포매팅
문자열 포맷 코드
포맷 코드 | 설명 |
%d | 정수(Integer) |
%f | 부동 소수(float) |
%c | 문자(Character) |
%s | 문자열(String) |
%o | 8진수 |
%x | 16진수 |
%% | 문자 % |
문자열 포매팅은 문자열 사이에 포맷코드를 대입시켜서 결과를 출력하는 것입니다.
5_1. 정수형 포매팅
5_1_1) 숫자를 대입하는 방법
>>> "짜장면 한 그릇에 %d원 입니다." %4000
'짜장면 한 그릇에 4000원 입니다.‘
5_1_2) 변수로 대입하는 방법
>>> value = 4500
>>> "짬뽕 한 그릇에 %d원 입니다." %value
'짬뽕 한 그릇에 4500원 입니다.'
5_2. 부동 소수 포매팅
5_2_1) 숫자를 대입하는 방법
>>> "원주율은 %f......입니다." %3.141592
'원주율은 3.141592......입니다.'
5_2_2) 변수로 대입하는 방법
>>> PI = 3.141592
>>> "원주율은 %f......입니다." %PI
'원주율은 3.141592......입니다.‘
5_3. 2개 이상의 포매팅
>>> "짜장면과 짬뽕의 가격은 각각 %d원과 %d원입니다." %(4000,4500)
'짜장면과 짬뽕의 가격은 각각 4000원과 4500원입니다.'
2개 이상의 값을 넣으려면 마지막 % 다음 괄호 안에 콤마( , )로 구분해서 각각의 변수를 넣어 주면 됩니다.
5_4. 문자열 포매팅
문자열 포매팅은 어떤 형태의 값이든 변환해 넣을 수 있습니다.
>>> "짜장면 한 그릇에 %s원 입니다." %4000
'짜장면 한 그릇에 4000원 입니다.'
>>> "원주율은 %s......입니다." %3.141592
'원주율은 3.141592......입니다.'
4000과 3.141592를 삽입하려면 정수형(%d)와 부동 소수형(%f)를 사용해야 합니다. 하지만 %s를 사용하면 % 뒤에 있는 값을 문자열로 바꾸기 때문입니다.
5_5. 문자 %
수정 전
>>> "프로젝트 완료까지 %d% 남았습니다." %20
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
"프로젝트 완료까지 %d% 남았습니다." %20
TypeError: not enough arguments for format string
예문을 사용하면 20%가 출력될 것이라고 예상하겠지만 파이썬은 값이 올바르지 않다는 (value Error) 메시지를 출력합니다. 이유는 문자열 포맷 코드인 %뒤에는 d, f, s 등 그거에 알맞게 코드가 들어가야 하는데 그렇지 못해서입니다. 해결방법은 %%를 사용해서 그 자체인 %를 출력합니다.
수정 후
>>> "프로젝트 완료까지 %d%% 남았습니다." %20
'프로젝트 완료까지 20% 남았습니다.'
포매팅을 안하고 %를 사용하면 에러 없이 사용 가능합니다.
>>> "프로젝트 완료까지 20% 남았습니다."
'프로젝트 완료까지 20% 남았습니다.'
6. 문자열 관련 함수
문자열 함수를 사용하려면, 문자열 변수 이름 뒤에 마침표( . )를 붙인 다음에 함수 이름을 사용하면 됩니다. 마침표( . )를 사용한 다음에 키보드에 있는 tap키를 누르면 무슨 함수가 있는지 보여줍니다. 또한 변수명이 길때도 tap키를 누르면 자동완성을 하게 됩니다.
6_1. 문자 개수 세기(count)
>>> a = "happy"
>>> a.count('a')
1
문자열의 a의 개수는 1개입니다.
6_2. 위치 알려주기1 (find)
>>> a = "happy"
>>> a.find('y')
4
>>> a.find('b')
-1
y는 결과가 잘나왔는데 b는 –1이 출력 되었습니다. 이유는 찾는 문자나 문자열이 존재하지 않는다면 –1을 반환 합니다.
6_3. 위치 알려주기2 (index)
>>> a = "happy"
>>> a.index('h')
0
>>> a.index('z')
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
a.index('z')
ValueError: substring not found
index가 find와 다른 점은 없는 문자나 문자열을 입력했을 때 find는 –1을 반환하지만 index는 에러문을 출력합니다.
6_4. 문자열 삽입 (join)
>>> a = ""
>>> a.join('1234')
'1234'
>>> a = ","
>>> a.join('123456')
'1,2,3,4,5,6'
>>> a = ", "
>>> a.join('123456789')
'1, 2, 3, 4, 5, 6, 7, 8, 9'
문자열 안에 join()함수를 이용해서 값을 삽입합니다.
6_5. 문자열 나누기 (split)
6_5_1) 공백 기준으로 문자열 나누기
>>> a = "He's reading a book."
>>> a.split()
["He's", 'reading', 'a', 'book.']
아무것도 입력하지 않으면 공백으로 인식합니다.
6_5_2) - 기호 기준으로 문자열 나누기
>>> a = "02-1234-5678"
>>> a.split(-)
SyntaxError: invalid syntax
>>> a.split('-')
['02', '1234', '5678']
기호 기준으로 나눌 때는 (' ') 문자를 꼭 써줘야 합니다.
문자열 함수 정리
함수 | 설명 |
count() | 문자 개수 세기 |
find() | 문자 위치 알려주기 |
index() | 문자 위치 알려주기 |
join() | 문자열 삽입 |
upper() | 소문자를 대문자로 바꾸기 |
lower() | 대문자를 소문자로 바꾸기 |
lstrip() | 왼쪽 공백 지우기 |
rstrip() | 오른쪽 공백 지우기 |
strip() | 양쪽 공백 지우기 |
replace() | 문자열 바꾸기 |
split() | 문자열 나누기 |
'Python > Python 기본 개념' 카테고리의 다른 글
5. 파이썬(Python) 제어문(if) (0) | 2017.08.23 |
---|---|
4. 파이썬(Python) 딕셔너리(Dictionary) (0) | 2017.08.07 |
3. 파이썬(Python) 튜플(Tuple) (0) | 2017.08.04 |
2. 파이썬(Python) 리스트(List) (0) | 2017.08.02 |
1. 파이썬(Python) 문자열1 (0) | 2017.07.26 |