본문 바로가기
언어/Python

[Python 기본 공부정리] 3-2. 자료형-문자열(string)

by 민-Zero 2019. 11. 28.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

1. 문자열(string)

문자열이란 유니코드로 이루어진 a,b,c,ㄱ,ㄴ 같은 문자나 단어로 이루어진 집합이다. 파이썬에서는 문자열 이용에 다양한 방법을 제공한다. 

""(큰따옴표), ''(작은따옴표)를 이용해 4가지의 방법으로 문자열을 만들 수 있다. "' 이렇게 두개를 혼용하면 안된다.

총 4가지의 선언 방법이 있는 이유는 문자열 데이터를 만들때 쓰는 ""와''를 문자열 안에 쓸 경우를 대비한 것이다.

문자열에 작은따옴표를 사용할 경우 문자열 전체를 큰따옴표로 감싸고 큰따옴표를 사용할 경우 작은 따옴표로 감싸면 된다. 또 다른방법은 " 나 ' 앞에 역슬레쉬를 붙여줄 경우 문자열을 둘러싸는 기호가 아니라 문자 자체로 인식하게 되어 문자열 내에 사용할 수 있게 된다.

이 방법은 한번에 문자열을 여러줄로 생성하는 방법이다. \n 이라는 이스케이프 코드를 통해 줄바꿈을 실행 할 수 있다. 또한 따옴표를 3개 선언하여 문자열을 생성한뒤 다음줄에 문자열을 만들경우 자동으로 여러줄인 문자열로 생성된다.

잠깐 사용한 이스케이프 코드란 미리 약속한 문자 조합 이다. 파이썬에서 이스케이프 코드로 \를 이용하며 주로 출력되는 문자열을 조작할때 사용된다. 몇 가지 이스케이프 코드를 정리하면 다음과 같다.

\n 개행(newline), 문자열 안에서 줄을 바꿀때 사용
\t 문자열 안에서 탭 간격을 줄때 사용
\\ 문자열 안에서 \문자를 그대로 사용 할때
\' 문자열 안에서 '문자를 그대로 사용 할때
\" 문자열 안에서 "문자를 그대로 사용 할때
\r 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동)
\f 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동)
\a 벨 소리(출력할 때 PC 스피커에서 '삑' 소리가 난다)
\b 백 스페이스
\0 NULL문자

 

2. 문자열 연산

파이썬에서는 문자열을 곱하거나 더하는 연산을 지원한다.

문자열 곱셈은 문자열을 곱한 횟수만큼 반복하는 기능이며, 문자열 덧셈은 문자열을 합치는 기능을 가진다.

변수에 문자열을 저장해 연산을 이용해도 되고 문자열 자체에 직접 연산을 적용하는 것도 가능하다.

내장함수인 len() 함수를 통해 문자열의 길이를 반환 받을 수 있다.

*연산을 이용할 경우 50회 반복되는 모습을 확인할수 있다. 또한 이 문자열의 길이는 문자의 크기와 상관없이 길이 자체를 반환하며 공백 또한 1의 길이를 가진다.

 

3. 인덱싱(indexing), 슬라이싱(slicing)

index는 색인이라고 하며 책 속에 다루어진 중요한 단어나 용어를 독자가 쉽게 찾을 수 있도록 페이지를 밝혀 벌여 놓은 것을 뜻한다. 즉 인덱싱은 index의 뜻처럼 문자열에서 원하는 위치의 문자를 쉽게 사용 가능하도록 돕는 것을 인덱싱 이라고 이해 할 수 있다.

 

문법)

변수명[인덱스 번호]

위의 방법으로 문자열에서 해당 위치의 문자를 쉽게 사용할 수 있다. 예를 들어 "Hi everyone" 이라는 문자열이 있으면 각 알파벳의 위치마다 번호가 존재해 그 번호를 통해 쉽게 접근 가능 하도록 지원하는 것이다.

H i   e v e r y o n e
0 1 2 3 4 5 6 7 8 9 10

인덱스 번호는 0번 부터 시작 하며 만약 문자열이 a라는 변수에 저장되어 있을경우 a[3]을 출력할경우 'e'가 출력된다.

또한 인덱스 번호에 음수를 사용하는 것 또한 가능 하다.

일반 양의정수를 사용할 경우 앞에서 부터 순서를 매겨 문자를 출력했다면 음수의 경우 뒤에서 부터 순서를 매겨 반환하게 된다. -0은 0과 같은 숫자이므로 맨 첫번째 문자의 위치를 그대로 가르키지만 -1의 경우 맨뒤의 문자인 'e'를 반환하는 것을 볼 수 있다.

 

slice는 잘라낸다는 뜻을 가지고 있다. 즉 인덱싱이 하나의 문자를 반환하는 방법 이라면 슬라이싱은 문자열을 잘라서 원하는 부분을 통째로 반환하는 방법이다.

 

문법)

변수명[시작 번호:끝 번호]       을 통해 문자열을 잘라낼 수 있다.

물론 슬라이싱을 하지 않고 인덱스 번호를 통해 일일이 더하여 만들 수도 있지만 너무 번거롭기 때문에 슬라이싱을 이용한다. 주의할점은 공백또한 인덱스 번호가 매겨지므로 공백을 포함하여 계산해야 하는것과 끝 번호가 내가 잘라내고자 하는 마지막 문자 'y'의 인덱스번호 7이 아니라 뒷번호인 8을 사용했는데 즉, [시작 번호:끝 번호] 는 (시작 번호<=  <끝 번호) 이란 뜻이다 주의 하자.

물론 인덱스 번호에 음수를 사용하여도 슬라이싱이 가능하다.

추가적인 방법으로 첫 번호를 생략할 경우 맨처음 문자부터 끝 번호 까지 반환 되고 끝 번호를 생략할 경우 시작 번호부터 맨 끝까지 전부 반환된다. 둘다 생략할 경우 문자열 전체가 반환된다.

 

사실 지금까지 변수명[시작 번호:끝 번호:step] 의 문법에서 step부분을 사용 하지 않기 위해 생략하고 있었다.

step부분은 문자열에서 문자를 얼마의 숫자만큼의 다음 문자를 반환할 것인지를 결정하는 부분이다. 첫번째의 경우 0:7의 부분을 0부터 시작하여 3만큼의 다음숫자로 건너 뛰어 출력하라 라는 의미 이므로, 0 기준 3만큼 움직인 숫자인 3 그다음은 6 이런식으로 출력 되는 것이다. step부분에 1을 사용할 경우 1개다음 숫자 이므로 그냥 쭉 출력된다.

 

4. 포맷팅(formatting)

포맷팅은 문자열의 서식 지정 이라고 한다. 쉽게 말해 문자열 안에 어떤값을 대입하는 방법이다. 포맷코드를 사용 하거나 포맷 함수를 사용하여 값을 대입 할 수있다.

문법)

포맷코드가 포함된 문자열 % 원하는 값

 

포맷 코드는 다음과 같다

%s 문자열(String)
%c 문자 1개(character)
%d 정수(Integer)
%f 부동소수(floating-point)
%o8 8진수
%x16 16진수
%% 문자 % 자체 사용 

 

이와 같이 포맷 코드를 문자열 중간에 위치 시킨뒤 (% 원하는값) 을 통해 문자열 중간에 삽입할 수 있다.

%.1f의 경우 소수점 뒷자리의 갯수를 사용자가 직접 정할 수 있으며 변수를 통한 삽입도 가능하다. 동시에 여러 값을 대입하고 싶다면 포맷 코드 위치에 맞추어 , 를 이용해 순서대로 대입 하면 된다.

 

이번에는 포맷함수를 이용하는 방법이다.

문법)

중간에 {숫자}가 포함된 문자열.format(값1, 값2, 값3,...)

 

포맷함수를 이용할 경우 따로 포맷코드를 사용하지 않아도 되며 {}안에 숫자를 입력하지 않을 경우 함수 인자가 차례대로 들어가며 {}안에 숫자를 입력한 경우 해당 숫자 번째 함수의 인자가 입력 된다.

 

{}안에 : 을 통해 기능을 추가로 사용 할 수 있다. 소수점 자리수를 결정 하고 싶은 경우 포맷코드 처럼 .1f 를 이용하면 소수점 1자리수 까지만 입력 가능 하게 할수 있으며 <(왼쪽정렬), >(오른쪽정렬), ^(가운대정렬) 의 기능을 가진 문자를 추가하고 그 뒤에 숫자를 입력할경우 숫자만큼의 길이의 문자열 공간을 확보 한뒤 문자열을 넣고 정렬하게 된다. 

정렬을 위한 문자앞에 아무것도 입력하지 않으면 남은 길이가 빈칸으로 채워지지만 <,>,^ 앞에 어떤 문자를 입력할 경우 그 문자가 공백대신 채워지게 된다.

 

추가적으로 문자열 앞에 f문자를 붙이면 포맷함수를 이용할 때처럼 사용 가능하다.

 

5. 문자열 관련 메소드

 문자열은 다양한 기능을 가진 내장함수를 가지고 있다.

 

1) upper, lower

upper 함수는 해당 문자열의 소문자를 전부 대문자로 lower 함수는 대문자를 소문자로 바꿔주는 기능을 가진다.

 

2) count

count 함수는 문자열내에서 함수의 매개변수와 같은 부분 문자열의 횟수를 반환 한다. 대소문자를 구분 하기 때문에 같은 알파벳 이라도 대소문자가 다르면 세지 않는다. 찾고자 하는 부분문자열이 연속으로 나올경우 다른 문자열로 인식하지 않고 잘라서 여러개의 문자열로 인식 하는 것도 확인 할 수 있다.

 

3) find, index

 

find와 index 모두 문자열에서 찾고자 하는 문자나 문자열의 시작 인덱스 번호를 반환한다. 두개의 차이점은 find의 경우 문자를 찾지 못할경우 -1을 반환하지만 index는 에러를 발생시킨다.

 

4) join

join함수는 문자열의 문자 사이에 문자를 삽입하는 기능을 가진 함수이다. 문자열 자체를 이용 하거나 변수를 이용하여도 가능 하다. 문자열 뿐만 아니라 리스트 자료형을 이용할 수 있다.

 

5) lstrip, rstrip, strip 

strip함수는 문자열의 공백을 지우는 함수로 lstip은 왼쪽공백만을 지우고 rstrip은 오른쪽공백 strip은 양쪽공백 모두를 지운다.

 

6) replace

replace함수는 replace('바꾸고 싶은 문자열','바꿀 문자열') 을 통해 문자열의 일부분을 특정 문자열로 변경할 수 있는 함수이다.

 

7) split

split 함수는 문자열을 나누어 리스트에 옮겨담는 함수 이다. 구분자(sep)를 넘겨주지 않는 다면 공백을 기준으로 나뉘어 리스트에 저장되며 구분자를 줄 경우 구분자를 기준으로 나누어 리스트에 저장하게 된다. 구분자가 공백이 아닐경우 공백까지 포함되어 나뉘게 되므로 주의하자.

댓글