상세 컨텐츠

본문 제목

3. 파이썬 자료형 - 문자열(2) : 슬라이싱, 포매팅

Python/Basic Grammar

by groomi 2022. 3. 16. 09:53

본문

2. 문자열(String)

2-5. 문자열 슬라이싱(Slicing)

 - 슬라이싱이란?

: 하나의 인덱스가 아니라 특정 부분을 잘라서 추출하는 것. 예를 들어, "abcdef"라는 문자열에서 첫 번째 문자부터 세 번째 문자까지 뽑아내고 싶다면, 이를 한 번에 추출하는 것이 바로 슬라이싱 기법이다.

 

- 슬라이싱 하는 법

인덱싱 기법과 비슷하다. 문자열 또는 변수 다음에 대괄호[]를 삽입하고 그 안에 시작번호:끝번호 형태로 인덱스 번호를 입력한다.

예시를 통해 살펴보자.

문자열 슬라이싱

변수 a의 인덱스 첫 번째 문자부터 6번째 문자까지를 슬라이싱한 것이다. 이때, 중요한 점은 끝번호에 해당하는 인덱스 값은 추출하지 않는다는 점이다. 즉, 인덱스 0부터 6까지(=첫번째 문자부터 일곱번째 문자까지)를 추출하고 인덱스 7에 해당하는 여덟번째 문자인 공백(' ')은 추출하지 않는다. 

 

- 슬라이싱의 시작 번호가 0일 필요는 없다.

시작번호가 0이 아닌 슬라이싱

 

- 끝 번호를 생략하면 시작 번호부터 문자열의 끝까지 추출한다.

끝 번호가 생략된 슬라이싱

 

- 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 추출한다.

시작번호를 생략한 슬라이싱

 

- 시작 번호, 끝 번호 모두를 생략하면 문자열 전체를 가져온다.

시작번호, 끝번호 모두 생략된 슬라이싱

 

- 슬라이싱에서도 인덱싱과 마찬가지로 - 기호를 사용하여 뒤에서부터 추출할 수 있다.

- 기호를 사용한 슬라이싱

 

 2-6. 문자열 포매팅(Formatting)

 - 문자열 포매팅이란?

: 문자열을 형식화하는 것. 

예를 들어, "오늘은 10개의 사과를 수확했습니다"라는 문자열이 있다고 해보자.

이 문자열은 매일 수확한 사과의 개수를 알려준다. 그리고 이 메세지를 매일 활용한다고 하자. 

그렇다면 나머지 문자는 매일 똑같이 나올 것이고, 몇 개를 수확했는지 표시하는 숫자만 변경될 것이다.

이때, 이 문자열을 "오늘은 (숫자)개의 사과를 수확했습니다"라고 형식화하여 숫자만 변경하여 대입할 수 있게 한다면, 편리할 것이다. 이렇게 숫자뿐만 아니라 문자열에 다양한 형식을 지정하여 변수를 대입하고, 정렬하고, 소수점을 표현하는 등의 작업을 편리하게 할 수 있도록 하는 것을 문자열 포매팅이라고 한다. 

 

 2-7. 포맷 코드를 이용한 문자열 포매팅

형식을 지정하고자 하는 부분에 포맷 코드를 삽입한 후, 해당 부분에 대입하고자 하는 값를 문자열과 %로 결합한다.

(*포맷 코드는 서식(형식)을 지정하는 코드이다. 아래에서 더 자세히 설명..)

예를 들어, "오늘은 n개의 사과를 수확했습니다"라는 문자열에서 n을 정수 형식으로 지정하고 n에 10이라는 숫자를 대입하고 싶다면, 다음과 같이 하면 된다.

"오늘은 %d개의 사과를 수확했습니다" % 10

여기에서 %d는 정수 형식을 지정하는 포맷코드이다. 그리고 10은 대입하고자 하는 값이고, 이를 앞의 문자열과 %로 연결했다. 출력 결과는 다음과 같다. 

'오늘은 10개의 사과를 수확했습니다'

제대로 대입이 되었다. 

 

이러한 역할을 하는 포맷 코드로는 다음과 같은 것들이 있다.

코드 형식
%s 문자열(String)
%c 문자 1개(Character)
%d 정수(Integer)
%f 부동 소수(Floating-point)
%o 8진수(Octal)
%x 16진수(Hexadecimal)
%% 문자 '%' 그 자체
* 한 문자열 안에서 다른 포매팅 코드를 사용할 때, '%'문자 그 자체도 사용하고 싶다면 반드시 %% 코드를 사용해야 한다. 하지만, 다른 포매팅 코드를 사용하지 않는 문자열 안에서 %를 나타내고 싶다면 그냥 %만 사용해도 된다.

 

포맷코드를 활용한 문자열 포매팅의 더 다양한 예시를 살펴보자.

 

%s 활용한 문자열 포매팅

 

숫자형 변수를 대입

 

두 개 이상의 값을 대입하는 포매팅

문자열 안에 2개 이상의 값을 대입하고자 할 때는 % 다음 괄호 안에 넣고 싶은 값들을 콤마로 구분하여 각각의 값을 넣어준다. 순서대로!

 

%s에 정수형 대입

%s로 형식을 지정하면 어떤 값이든 대입 가능하다. %s는 % 뒤의 값을 자동으로 문자열로 변환하기 때문이다. 따라서, 모든 형식을 대입해도 상관 없다.

 

- 숫자와 함께 포맷 코드를 사용하기

%s는 문자열 형식을 지정하는 포맷 코드이다. 여기에 숫자를 함께 사용하면 어떻게 될까?

%10s는 10개의 문자열 자리를 지정한다. 즉, 문자 10개가 들어올 자리를 마련해놓는 것이다.

이미 10개의 문자가 들어올 자리를 만들어 놓았기 때문에 10개 미만의 문자를 대입한다면, 나머지 자리는 공백으로 남게 된다.

%10s 포매팅

10개의 문자로 지정한 서식의 문자열에 "안녕하세요"라는 5개의 문자만 대입되었다. 그 결과, 왼쪽에 5개의 공백이 생겼고, 안녕하세요는 오른쪽으로 정렬되었다. %10s는 10 다음에 s가 있으므로 10개의 공간을 마련해놓고 문자를 오른쪽부터 채운다고 생각하면 편하다. len 함수를 통해 문자열의 길이를 확인해보면 예상대로 10이다. 

%-10s 포매팅

위와 같이 - 기호를 활용하면 왼쪽 정렬도 가능하다. 오른쪽에 4개의 공백이 생겼고, Sunday가 왼쪽으로 정렬되었다. 

 

이번에는 %f와 숫자를 함께 사용하면 어떻게 되는지 보자.

소수점 표현

%0.4f"는 소수점 4번째 자리까지 나타내겠다는 것을 의미한다. '.' 이후의 숫자를 통해 소수점 뒤에 나오게 될 숫자의 개수를 지정한다. 소수점 넷째자리까지 나타내기 위해 결과는 5번째 자리에서 반올림해서 나왔다.

길이 지정, 소수점 표현

이것은 문자열의 길이도 지정하고 소수점 아래 자리수도 지정한 코드이다. 10은 문자열의 길이를 의미한다. 소수점 아래 4는 위와 마찬가지로 소수점 넷째자리까지 나타낸다는 것을 의미한다. 3.1416은 총 6개의 문자를 차지하고 있고, 따라서 왼쪽에 4개의 공백이 출력되고, 해당 숫자는 오른쪽 정렬되었다. 

 

 2-8. format 함수를 이용한 문자열 포매팅

format 함수를 이용하면 좀 더 편리하게 포매팅이 가능하다. 

첫 번째 방식은 포맷 코드 대신 {0}, {1] 등의 인덱스 항목을 사용하는 것이다. 문자열, 정수형 등의 데이터 타입과 상관 없이 사용할 수 있다. 

format 함수 이용한 포매팅

포맷 코드를 활용한 방식과 유사하지만, 차이점은 포맷코드 대신 {0}과 같은 인덱스 항목을 사용한다는 것과 값을 대입하기 위해서 문자열 뒤에 점(.)을 찍고 format함수를 입력한 다음 괄호 안에 대입하고자 하는 값을 입력한다는 점이다.

2개 이상의 값 대입 format 함수

2개 이상의 값을 대입할 때는 이런 식으로 하면 된다. 첫 값은 {0}으로 표시하고, 두 번째 값은 {1}으로, 세 번째 값은 {2} ... 이런 식으로 인덱스 항목의 중괄호 안의 수를 키운다. 그리고 format 함수의 괄호 안에 콤마를 이용하여 구분하여 값을 넣는다. 

 

두 번째 방식은 인덱스 항목 대신 name과 값을 명시해주는 형태이다. 

name = value 포매팅

인덱스 항목 대신 자신이 사용하고자 하는 이름을 설정하여 {}안에 넣는다. 그리고 format의 괄호 안에는 name = value 형태로 이름과 그 안에 들어갈 값을 각각 명시해주어야 한다. 

 

세 번째 방식으로 인덱스 항목과 name을 혼용하는 것도 가능하다.

인덱스 항목과 name 혼용 포매팅

먼저, 사과의 개수는 인덱스 항목으로, 배의 개수는 name과 value로 입력한 코드는 결과가 잘 산출되었다.

하지만, 먼저 나오는 사과의 개수를 name으로 지정했을 때는 에러가 발생했는데 이는 파이썬의 argument 처리 순서 때문인 것으로 보인다. argument 처리에 관한 자세한 내용은 추후에 다루기로..

따라서 혼용하려면 뒤에 나오는 것을 name으로 처리해줘야 하겠다! 

 

- format 함수를 이용한 더 다양한 기능들

정렬 

{0:<N} : N개의 문자열 자릿수를 만들고 왼쪽으로 정렬한다(<가 왼쪽을 향함)

{0:>N} : N개의 문자열 자릿수를 만들고 오른쪽으로 정렬한다(>가 왼쪽을 향함)

{0:^N} : N개의 문자열 자릿수를 만들고 가운데로 정렬한다(:^기호는 가운데 정렬을 의미)

':' 뒤의 <, >, ^를 정렬문자라고 한다.

{0:s정렬문자N} : N개의 문자열 자릿수를 만들고 정렬한다. 이 때, 공백 대신 지정한 문자인 s로 채운다. (s에는 숫자, 알파벳, 특수 기호 등의 문자가 들어갈 수 있으며, 한 개만 들어가면 된다. 공백 대신에 그 문자가 반복해서 나온다) 

<아래 예시 참고>

format 함수를 이용한 정렬%

소수점 표현하기

소수점 아래 자리수를 지정하고, 또 전체 문자열 자릿수를 지정하는 등의 방식은 앞서 배웠던 포맷코드 %f를 사용한 것과 유사하다. % 대신에 0: 을 사용한다는 것만 다르다. 그리고 다른 format 함수 사용법과 마찬가지로 중괄호 안에 넣어준다. 

format 함수로 소수점 표현

'{' 문자 자체를 사용하고 싶을 때는 '{{'를 이용

format 함벼수 이용 시 {{로 문자 { 표현

 

 6-9. f문자열 포매팅

f문자열 포매팅은 중괄호 안에 자신이 넣고자 하는 값을 직접 넣어 포매팅할 수 있는 기법이다.

변수 값을 사전에 생성한 후 그 값을 참조하는 것도 가능하다.

문자열 앞에 f를 붙이는 방식으로 사용하면 된다. 문자열 안에 자신이 넣고자 하는 값을 {something} 형식으로 넣거나, 변수를 대입할 곳에는 {변수명}을 삽입한다.

f 문자열 포매팅(변수명 사용)
f 문자열 포매팅(직접 대입)

f 문자열 포매팅은 표현식을 사용할 수 있다

표현식 : 문자열 내에서 변수와 +,- 같은 수식을 함께 사용하는 식

f문자열 포매팅에서 표현식 사용

정렬과 소수점 표현 - 기본적인 것은 format 함수 사용할 때와 같다

f 문자열 포매팅 - 정렬
f 문자열 포매팅 - 소수점 표현

'{' 문자 자체를 사용하고 싶을 때는 '{{'를 이용

f 문자열 포매팅 - { 나타내기

 

<참고 자료> 

https://wikidocs.net/13

 

02-2 문자열 자료형

[TOC] ## 문자열이란? 문자열(String)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 것들이 문자열이다. ```{.no-h ...

wikidocs.net

 

관련글 더보기

댓글 영역