은공지능 공작소 :: 'join함수 vs +=' 태그의 글 목록

오늘은 파이썬 알고리즘에 많이 사용되는
문자열 다루는 꿀팁 테크닉을 알려드리려고 합니다.
간단히 다음 장에서 결론부터 말씀드리고 설명 드리겠습니다.

 

 

 

 

 

1. 요약 정리


결론은 그냥 문자열을 +하는 것보다 join 함수를 쓰라는 것입니다.
시간 절약을 4배 이상 할 수 있습니다.
다만, 결론에서 말씀드렸다시피 "잘~" 쓰시는게 중요합니다.
다음 절에서 join 함수에 관해 설명 드리겠습니다.

 

 

 

 

 

2. join 함수란?


data = ['a', 'b', 'c']
print(''.join(data))
print('/'.join(data))
output
------------------------------------------
abc
a/b/c
join 함수는 리스트를 합쳐 문자열로 만들어주는 함수입니다.
그런데, join 함수는 구분자를 지정해 줄 수 있습니다.
위의 예시를 살펴보겠습니다.

''.join(data) -> data를 합치는데, 구분자를 공백으로 하니 'abc'가 나옵니다.
'/'.join(data) -> data를 합치는데 구분자는 슬래시(/)로 하니 'a/b/c'가 나옵니다.

보통 코딩테스트에서 join의 구분자는 공백과 함께 많이 쓰게 됩니다.
(문제에 따라 다르겠지만요)

 

 

 

 

 

3. join 함수 잘 쓰는 법


뜬금없이 퀴즈입니다.
join을 잘 쓰려면 어떻게 써야 할까요?

case1은 미리 리스트를 만들어 두고 나중에 join으로 한 번에 합치는 방식이고,
case2는 그 때 그 때 s라는 문자열에 join을 시켜버리는 방식입니다.
과연 정답은?
반응형

 

 

 

 

리스트를 미리 만들어 둔 Case1의 승리입니다.
둘 다 join 함수를 써서 시간 차이가 별로 나지 않긴 하네요 ^^
하지만 +=로 재보았을 때는 125초가 나왔답니다.

 

 

 

 

 

4. 왜 join이 +=보다 빠른가?


https://waymoot.org/home/python_string/

 

Efficient String Concatenation in Python

  Efficient String Concatenation in Python An assessment of the performance of several methods Introduction Building long strings in the Python progamming language can sometimes result in very slow running code. In this article I investigate the computati

waymoot.org

왜 join이 +=보다 빠를까요?
결론부터 말씀드리면, new representation이 매 번 생기지 않기 때문이라고 합니다.
(representation: 객체를 print해보면 나오는 표현식의 일종)

+= 연산은 매 번 new representation을 생성합니다.
그리고 이것은 파이썬 알고리즘 문제풀이에서
많은 시간초과를 발생시키는 원인이기도 합니다.
(궁금하신 분들을 위해 representation에 관한 reference를 남겨두겠습니다)

이것이 join 연산이 +=에 비해 월등히 빠른 이유입니다.

 

 

참고자료: https://www.pythonmorsels.com/string-representations/

 

String Representations for Classes

All Python objects have two different string representations, although we almost always use just one of them. You can customize both of these string representation on your Python objects.

www.pythonmorsels.com

 

 

 

 

 

5. 정리


반복적인 문자열을 처리할 때는
join함수를 이용하되,
미리 리스트를 만들어 두고 처리하자!

이상으로 포스팅을 마치겠습니다.
도움이 되셨다면 댓글과 하단의 하트 한 번씩 부탁드립니다.
감사합니다.
반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,