Unit 24. 문자열 응용하기
문자열도 문자 여러개가 연속적으로 이어져 있는 시퀀스 자료형이기 때문에 리스트와 비슷하게 사용할 수 있다.
24.1 문자열 조작하기
24.1.1 문자열 바꾸기
replace('바꿀 문자열', '새 문자열')의 형식으로 문자열 안의 문자열을 다른 문자열로 바꾼다. 문자열 자체는 바뀌지 않으며 바뀐 결과를 반환한다.
바뀐 결과를 유지하고 싶다면 문자열이 저장된 변수에 replace를 사용한 뒤 다시 변수에 할당해 준다.
24.1.2 문자 바꾸기
translate는 문자열 안의 문자를 다른 문자로 만든다. 이것을 사용하기 위해서는 먼저 str.maketrans('바꿀 문자', '새 문자')로 변환 테이블을 만든다. 그 후 translate(테이블)을 사용하면 문자를 바꾼 뒤 결과를 반환한다.
다음과 같은 경우는 a,e,i,o,u를 각각 1,2,3,4,5로 바꾼다.
24.1.3 문자열 분리하기
split()은 공백을 기준으로 문자열을 분리한다. 또한 괄호 안에 기준 문자열을 지정하면 그 문자열을 기준으로 문자열을 분리한다.
위의 경우 콤마와 쉼표를 기준 문자열로 지정해서 ', '을 분리하여 단어만 리스트로 만든다.
24.1.4 구분자 문자열과 문자열 리스트 연결하기
리스트로 분리된 문자열을 다시 연결하여 문자열로 만드는것도 가능하다. join(리스트)로 구분자 문자열과 문자열 리스트의 요소를 연결하여 하나의 문자열로 만든다. 다음은 공백 ' '에 join을 사용하여 각 문자열 사이에 공백이 들어가도록 한 것이다.
24.1.5 소문자를 대문자로 바꾸기
문자열의 문자를 모두 대문자로 바꾸려면 upper()를 사용한다. 문자열 안에 대문자가 있으면 그대로 유지된다.
24.1.6 대문자를 소문자로 바꾸기
문자열의 문자를 모두 소문자로 바꾸려면 lower()를 사용한다. 문자열 안에 소문자가 있다면 그대로 유지된다.
24.1.7 왼쪽 공백 삭제하기
lstrip()은 문자열에서 왼쪽에 있는 모든 연속된 공백을 삭제한다.
24.1.8 오른쪽 공백 삭제하기
rstrip()은 문자열에서 오른쪽에 있는 모든 연속된 공백을 삭제한다.
24.1.9 양쪽 공백 삭제하기
strip()은 문자열 양쪽에 있는 연속된 모든 공백을 삭제한다.
24.1.10 왼쪽의 특정 문자 삭제하기
lstrip('삭제할 문자들')의 형식으로 사용하면 문자열 왼쪽에 있는 해당 문자를 모두 삭제한다.
여기서는 공백을 지정하지 않았기 때문에 공백은 남아있다.
24.1.11 오른쪽의 특정 문자 삭제하기
rstrip('삭제할 문자들')의 형식으로 사용하면 문자열 오른쪽에 있는 해당 문자를 모두 삭제한다.
24.1.12 양쪽의 특정 문자 삭제하기
strip('삭제할 문자들')의 형식으로 사용하면 문자열 양쪽에 있는 해당 문자들을 삭제한다.
string 모듈의 punctuation에는 모든 구두점이 있다.
다음과 같이 strip()메서드에 string.punctuation을 넣어주면 문자열 양쪽의 모든 구두점을 삭제할 수 있다.
24.1.13 문자열을 왼쪽 정렬하기
ljust(길이)는 문자열을 지정한 길이로 만들고, 왼쪽으로 정렬한 후, 남는 공간을 공백으로 채운다.
문자열보다 길이를 작게 지정하면 다음과 같이 아무 변화 없다.
24.1.14 문자열을 오른쪽 정렬하기
rjust(길이)는 문자열을 지정한 길이로 만들고, 오른쪽으로 정렬한 후 남은 공간을 공백으로 채운다.
24.1.15 문자열을 가운데 정렬하기
center(길이)는 문자열을 지정한 길이로 만들고, 가운데 정렬하며 남는 공간은 공백으로 채운다. 다음의 경우 문자열의 길이를 10으로 만들어 가운데로 정렬한 뒤 양 옆의 남은 공간은 2칸씩 채운다.
남는 공간이 홀수가 된다면 왼쪽에 공백이 한 칸 더 들어간다.
24.1.16 메서드 체이닝
문자열 메서드는 처리한 결과를 반환하도록 만들어졌기 때문에 메서드를 계속 연결해서 호출하는 메서드 체이닝이 가능하다. input().split()도 메서드 체이닝이고, 다음 코드는 문자열을 오른쪽 정렬 한 뒤 대문자로 만드는 메서드 체이닝이다.
24.1.17 문자열 왼쪽에 0 채우기
zfill(길이)는 지정된 길이에 맞춰서 문자열의 왼쪽에 0을 채운다. 문자열의 길이보다 지정된 길이가 작다면 아무것도 채우지 않는다. 보통 숫자를 일정 자리수로 맞추고 앞자리를 0으로 채울 때 사용한다.
24.1.18 문자열 위치 찾기
find('찾을 문자열')은 문자열에서 해당 문자열을 찾으면 위치 인덱스를 반환하고, 없으면 -1을 반환한다. 왼쪽에서 부터 문자열을 찾는데, 같은 문자열이 여러 개일 경우 처음 찾은 문자열의 인덱스를 반환한다.
24.1.19 오른쪽에서부터 문자열 위치 찾기
rfind('찾을 문자열')은 문자열에서 해당 문자열을 오른쪽에서부터 찾아서 찾으면 위치 인덱스를 반환하고, 없으면 -1을 반환한다. 같은 문자열이 여러개인 경우 먼저 찾은 인덱스를 반환한다.
24.1.20 문자열 위치 찾기
index('찾을 문자열')은 왼쪽에서 부터 해당 문자열을 찾아서 위치 인덱스를 반환하고, 없으면 에러를 발생시킨다. 해당 문자열이 여러개일 경우 처음 찾은 문자열의 인덱스만 반환한다.
24.1.21 오른쪽에서부터 문자열 위치 찾기
rindex('찾을 문자열')은 오른쪽에서부터 특정 문자열을 찾아서 인덱스를 반환한다. 문자열이 없으면 에러를 발생시키며, 해당 문자열이 여러개일 경우 처음 찾은 문자열의 인덱스만 반환한다.
24.1.22 문자열 개수 세기
count('문자열')은 현재 문자열에서 특정 문자열이 몇 번 나오는지 확인할 수 있다.
24.2 문자열 서식 지정자와 포매팅 사용하기
문자열 안에서 특정 부분을 원하는 값으로 바꿀 때 문자열 서식 지정자 또는 포매팅을 사용한다.
24.2.1 서식 지정자로 문자열 넣기
서식 지정자는 %로 시작하고, 자료형을 뜻하는 문자가 붙는다. %s는 문자열 이라는 의미이다. 문자열 안에 서식지정자(%s)를 넣고 그 뒤에 %를 넣고 뒤에 서식 지정자에 넣고 싶은 문자열을 지정한다.
다음과 같이 문자열을 직접 지정하지 않고, 변수에 넣어 지정하는 것도 가능하다.
24.2.2 서식 지정자로 숫자 넣기
십진 정수를 의미하는 서식 지정자는 %d이다.
24.2.3 서식 지정자로 소수점 표현하기
실수를 넣을 때는 %f를 사용하며 고정 소수점의 f이다.(Fixed point) %f는 기본적으로 소수점 이하 6자리 까지 표현하며, 소수점 이하 자리수를 지정하고 싶으면 f 앞에 .(점)자리수 를 지정해주면 된다.
24.2.4 서식 지정자로 문자열 정렬하기
서식 지정자 % 뒤에 숫자를 넣으면 문자열을 지정된 길이로 만든 뒤 오른쪽으로 정렬하고 남는 공간을 공백으로 채운다.
%d 와 %f도 숫자와 조합하여 오른쪽으로 정렬시킬 수 있다.
%f의 경우 .(점) 앞에 정렬할 길이를 지정하고, 점 뒤에 소숫점 이하 자리수를 지정한다.
왼쪽 정렬은 문자열 길이에 -기호를 붙이면 된다.
24.2.5 서식 지정자로 문자열 안에 값 여러 개 넣기
문자열 앞에 값을 두 개 이상 넣으려면 %를 붙이고, 괄호안에 값(변수)을 콤마로 구분해서 넣으면 된다. 괄호로 값을 묶지 않으면 에러가 발생한다.
위 경우는 서식 지정자가 두개라 값도 두 개가 들어갔다. 값은 항상 서식 지정자와 개수를 맞춰줘야 한다. 만약 서식 지정자 둘을 붙이면 결과도 붙어서 나오므로 주의해야 한다.
24.2.6 format 메서드 사용하기
문자열 포매팅은 { }(중괄호) 안에 포매팅을 지정하고, format()메서드로 값을 넣는다.
{ } 안에는 인덱스를 지정하고, format()안에는 { }에 넣을 값을 지정하면 된다.
24.2.7 format메서드로 값을 여러개 넣기
{ } 안에 인덱스를 지정하고 format에는 인덱스가 증가하는 순서대로 값을 넣으면 된다. 문자열에는 인덱스 숫자에 해당하는 값이 들어간다.
format()안에 지정한 값은 인덱스를 0부터 순서대로 지정되며 { }안에 해당하는 인덱스 값에 들어간다.
24.2.8 format 메서드로 같은 값을 여러 개 넣기
다음과 같이 같은 인덱스가 지정된 { }가 여러개 있으면 같은 값이 여러 개 출력된다.
24.2.9 format 메서드에서 인덱스 생략하기
{ }에서 인덱스를 생략하면 format()에 지정한 순서대로 값이 들어간다.
24.2.10 format 메서드에서 인덱스 대신 이름 지정하기
{ } 안에 인덱스 대신 이름을 지정하고, format()에는 이름에 해당하는 값을 지정해주면 된다.
24.2.11 문자열 포매팅 변수를 그대로 사용하기
변수에 값을 넣고 { } 에 변수 이름을 지정하고 문자열 앞에 f를 붙이면 변수의 값을 { }에 불러올 수 있다.
{ } 중괄호 자체를 출력하려면 {{, }} 처럼 중괄호를 두번 사용하면 된다.
24.2.12 format 메서드로 문자열 정렬하기
다음과 같이 인덱스 뒤에 :(클론)을 붙이고 정렬할 방향과 길이를 지정해주면 된다.
'{인덱스:<길이}'.format(값)
부등호 방향이 왼쪽을 가리키고 있기 때문에 왼쪽으로 정렬하고 나머지 공간은 공백으로 채운다.
부등호 방향이 오른쪽을 가리킨다면 오른쪽으로 정렬하고 남는 공간은 공백으로 채운다.
인덱스를 지정하지 않고 클론 뒤에 방향과 길이만 지정해도 된다.
24.2.13 숫자 개수 맞추기
정수와 실수 앞에 0을 넣어서 숫자 개수를 맞출 수 있다. %d는 %와 d사이에 0과 숫자 자리수를 넣으면 자리수에 맞춰서 앞에 0이 들어간다. { }를 사용할 때는 인덱스나 이름 뒤에 클론을 붙이고, 03d처럼 0과 숫자 개수를 지정해주면 된다.
실수는 다음과 같이 .(점) 뒤에 소수점 자리수를 지정할 수 있다. 실수는 숫자 개수 부분에 정수 부분, 소수점, 실수부분이 모두 포함된다.
24.2.14 채우기와 정렬을 조합하여 사용하기
문자열 포매팅은 채우기와 정렬을 조합하여 사용할 수 있다. 다음과 같이 { }에 인덱스, 채우기, 정렬, 길이, 자릿수, 자료형 순서로 채운다.
'{인덱스:채우기 정렬(부등호) 길이.자릿수 자료형}'
길이를 10으로 만들고 왼쪽, 오른쪽으로 정렬한 후 남은 공간을 0으로 채운 것이다.
실수로 만들 것이면 다음과 같이 소수점 자리수와 실수 자료형 f를 사용하면 된다.
채우기 부분에는 0이 아닌 다른 문자가 들어가도 된다. 공백을 넣어도 되고, 아무 값도 지정되지 않으면 공백으로 처리하며, 다른 아무 문자나 넣어도 된다.
금액을 표현하기 위해 천 단위로 구분할때 format()함수에 숫자와 콤마를 넣어 간편하게 구분할 수 있다.
다음과 같이 서식 지정자와 함께 사용할수 있다.
포매팅에서 콤마를 넣으려면 다음과 같이 클론 뒤에 콤마를 넣는다.
정렬을 사용하려면 정렬 방향과 길이 뒤에 콤마를 넣는다.
24.3 퀴즈
정답은 a, e 이다. count 는 문자열에서 지정한 문자열이 몇번 나오는지 세는 메서드이고, index는 왼쪽에서부터 찾는다.
정답은 d이다.
정답은 b,d이다.
정답은 c,d이다.
24.4 연습문제: 파일 경로에서 파일 명만 가져오기
정답은 다음 코드와 같다.
f_list = path.split('\\')
filename = f_list[-1]
경로를 \\를 기준으로 나누면 리스트가 생성된다 출력하고자 하는 내용은 리스트의 마지막 요소에 들어있기 때문에 filename에 -1 인덱스를 저장하면 된다.
24.5 심사문제 : 특정 단어 개수 세기
정답은 다음 코드와 같다.
s = input()
s_list = list(s.split())
cnt = 0
for i in s_list:
if i.strip(',.') == 'the':
cnt += 1
print(cnt)
입력된 문자열을 공백 기준으로 끊어서 리스트로 만들고, the에 .이나 ,가 붙어있을 수도 있기 때문에 ,.을 제거하고, the랑 비교해서 일치하면 숫자를 하나씩 누적하여 마지막에 누적된 숫자를 출력한다.
24.6 심사문제: 높은 가격 순으로 출력하기
정답은 다음 코드와 같다.
price = list(map(int, input().split(';')))
price.sort(reverse=True)
for i in price:
print('{:>9,}'.format(i))
입력값을 정수로 된 리스트로 만들고, 내림차순으로 정렬한다. 이후 반복문으로 모든 요소들을 9자리로 만들고, 오른쪽으로 정렬하고, 천 단위로 콤마를 붙인다.
Unit 25. 딕셔너리 응용하기
25.1 딕셔너리 조작하기
25.1.1 딕셔너리에 키-값 쌍 추가하기
딕셔너리에 키-값 쌍을 추가하는 메서드는 다음 두 가지가 있다.
- setdefault : 키-값 쌍 추가
- update : 키의 값 수정, 키가 없으면 키-값 쌍 추가
25.1.2 딕셔너리에 키와 기본 값 저장하기
setdefault(키)는 딕셔너리에 키-값 쌍을 추가한다. setdefault에 키만 지정하면 값에 None을 저장한다.
setdefault(키, 기본값)으로 지정하면 기본값을 저장한 뒤 해당 값을 반환한다.
25.1.3 딕셔너리에서 키의 값 수정하기
update 메서드를 사용하면 값을 수정할 수 있다. update(키=값)으로 값을 수정한다. 키는 큰따옴표나 작은따옴표는 빼고 쓴다.
만약 딕셔너리에 키-값 쌍이 없으면 추가한다.
콤마로 구분하여 키-값 쌍 여러 값을 한번에 수정할 수 있다.
update(키=값)은 키가 문자열일 때만 사용할 수 있다. 키가 숫자일 경우 update()괄호 안에 딕셔너리를 넣어서 수정할 수 있다.
[[키,값], [키,값]]처럼 키와 값을 리스트나 튜플로 수정할 수 있다.
키 리스트와 값 리스트를 묶은 zip객체로도 값을 수정할 수 있다.
'Project H4C Study Group' 카테고리의 다른 글
[Project H4C] 파이썬 코딩도장(10) (0) | 2021.01.29 |
---|---|
[Project H4C] 파이썬 코딩도장(9) (0) | 2021.01.28 |
[Project H4C] 파이썬 코딩도장(7) (0) | 2021.01.26 |
[Project H4C] 파이썬 코딩도장(6) (0) | 2021.01.25 |
[Project H4C] 파이썬 코딩도장(5) (0) | 2021.01.23 |