Python에서 String을 붙이는 방법은 단순히 '+' Operator 를 사용하면 됩니다.
1
|
NEW = "ABC" + "DEF"
|
오늘은 성능의 측면에서 문자열을 붙이는 방법에 대하여 살펴보겠습니다.
String이란?
C 에서는 문자열을 character 배열에 대한 포인터로 사용했습니다.
python에서는 단순히 alphabet = "3323" 등으로 선언을 해주면 문자열을 이어 붙이는 것은 단순히 뒤에 붙이는 것으로보입니다. 그러나 실제로는
"ABC" + "DEF" 의 결과물은 앞의 두 문자열과 관계없는 새로운 "ABCDEF" 스트링 객체 입니다.
[새로운 객체를 생성하는 것입니다.]
이는 당연히 + 연산을 한만큼 새로운 객체를 생성하는 것과 같습니다.
즉 "ABC" 의 뒤에 "DEF"를 붙이는 게 아닌!
새로운 객체를 생성해서 ABCDEF로 초기화 해주는 것 입니다.
이는 string이 immutable 클래스로 한 번 값이 정해지면 수정이 불가능하기 때문입니다.
리스트는 이와 다르게 뒤에 값을 추가하거나 빼거나 더할 수 있습니다.
따라서 효율성을 위해서 string + 연산자가 아닌 리스트를 이용해야 합니다.
--------------------------------------------------------------
EXPERIMENT 1 string 에 a 를 만 개 붙이는 for 문
1
2
3
|
string = ""
for i in range(10000):
string += "a"
|
RESULT 1
1
|
총 걸린 시간 : 0.3959634304046631
|
시간이 0.4초 정도 걸립니다.
--------------------------------------------------------------
EXPERIMENT 2
1
2
3
4
|
lst = []
for i in range(1000000):
lst.append("a")
string = "".join(lst)
|
RESULT 2
1
|
총 걸린 시간 : 0.2060694694519043
|
0.2초 정도로 lst를 이용해서 append를 하고 다시 string으로 만드니 시간이 절약되었습니다.
리스트를 이용하면 새로운 객체를 생성하지 않아서 시간이 훨씬 절약됩니다.
--------------------------------------------------------------
#시간을 측정하는 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# Library ----------------------
import time
# ------------------------------
start = time.time() # 시작 시간
string = ""
for i in range(1000000):
string += "a"
print(f"총 걸린 시간 : {time.time()-start}") # 시간 차이 빼기
# -------------------------------
|
cs |
참고 : Data structures & Algorithms in Python - Michael T. Goodrich, Roberto Tamassia, Michel H. Goldwasser
'프로그래밍' 카테고리의 다른 글
[Python][Algorithm] Find Index Before Sorted (0) | 2020.01.27 |
---|---|
[Python][Algorithm] 조합 Combination (0) | 2020.01.26 |
[Python] Operator overloading (0) | 2020.01.23 |
Template C++ (함수) (0) | 2019.12.18 |
Graph 표현 방법 Adjacency Matrix (C 언어) (0) | 2019.06.15 |