Python

[Python] 한 번에 여러 문자 치환

비번변경 2022. 3. 13. 22:40

문자열의 특정 문자 또는 특정 문자열을 치환할 때에는 보통 str.replace 함수를 사용한다. 하지만 여러 문자를 각각 치환하는데 사용하기엔 좋지 않다.

이 경우에는 str.translate 함수를 사용하는 것이 조금 더 적절하다.

 

사용법

1. 치환 규칙 정의

  • dictionary 사용
    dictionary를 사용하는 경우 ASCII 코드를 사용하여 정의해야 한다.
    아래 예시는 각 대문자를 세 자리 뒤의 문자로 치환하는 규칙을 정의한 것이다.
rule = {}
for i in range(ord('A'), ord('Z') + 1):
    rule[i] = (i - ord('A') + 3) % 26 + ord('A')
print(rule)

dictionary 사용

  • str.maketrans() 사용
    매개변수로 문자열을 받는다. 첫번째 매개변수의 문자열(from)을 두번째 매개변수의 문자열(to)로 치환한다. 문자열 내의 문자 각각을 동일한 위치의 문자로 치환하기 때문에 매개변수로 받은 두 개의 문자열은 길이가 같아야 한다.
    세번째 문자열은 삭제할 문자열이다.
inp = sys.stdin.readline()[:-1]

from = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
to = 'DEFGHIJKLMNOPQRSTUVWXYZABC'
remove = '\n'
rule = inp.maketrans(from, to, remove)
print(rule)

str.maketrans()

maketrans 함수의 결과를 출력하면 ASCII 코드를 키와 값으로 하는 dictionary를 확인할 수 있다.

 

2. 문자열 치환

str.translate 함수를 이용해 정의한 규칙대로 문자를 치환한다.

inp = sys.stdin.readline()[:-1]

# dictionary
rule = {}
for i in range(ord('A'), ord('Z') + 1):
    rule[i] = (i - ord('A') + 3) % 26 + ord('A')
    
print(inp.translate(rule))

# maketrans
o = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
n = 'DEFGHIJKLMNOPQRSTUVWXYZABC'
rule = inp.maketrans(o, n)

print(inp.translate(rule))

문자열 치환

728x90