string) transalte vs. replace

why use translate?

  • 우선, 저는 python의 string method 중에 translate라는 것을 써본 적이 없습니다.
  • 이름에서 알 수 있는 것처럼 해당 메소드는 스트링을 다른 스트링으로 변환시켜주는 기능을 수행합니다.
  • 그러나, 그런건 그냥 간단한 변환 딕셔너리를 만들고 읽으면서 replace를 사용해서 처리해주는 것이 더빠르지 않을까요?

do it.

  • 이해를 돕기 위해서 간단하게 만들어 봤습니다.
import time 

a = "abcdcdcdaaaa"*20000000

# timeit: 시간을 제기 위한 magic command 
# string의 method인 maketrans라는 것을 만들고 길이가 같은 두 스트링을 넘겨줌.
# 즉, a==> c, b==>d 로 매핑되어 변환됨. 
%timeit a.translate("".maketrans("ab", "cd"))

# 여기서는 각각 key => value의 형태로 만들어서 처리해줌. 
trans_dict = {"a":"b", "c":"d"}
def trans_with_dict(input_s):
    for k, v in trans_dict.items():
        input_s = input_s.replace(k, v)
    return input_s
    
%timeit trans_with_dict(a)
  • 속도 차이는 약 1.5배 정도 납니다.
1 loop, best of 3: 267 ms per loop
1 loop, best of 3: 513 ms per loop

wrap-up

  • 그냥 참고삼아 작성했습니다만. 저는 이정도 속도차이라면 굳이 사용할 필요가 없다고 생각합니다.
  • 가독성도 떨어지고, 세부적인 조작도 어려운데 이런 펑션이 꼭 파이썬에 있어야 하나 싶기도 하구요.

댓글남기기