본문 바로가기
Python/Data Structure

[Python]리스트 문자열 값들 합치기

by 전봇대파괴자 2021. 3. 16.

알고리즘 문제를 풀다 보면 리스트를 이리 저리 자르고 붙이다가 마지막에 하나의 문자열로 출력해야 할 때가 있습니다. 언제나와 같이 예를 들어보겠습니다. 

 

word='Python'
li=list(word) # string(문자열)을 리스트로 만들기

>>> ['P', 'y', 't', 'h', 'o', 'n']

 

list 함수에 문자열을 넣을 경우 통째로가 아니라 한 자 한 자를 떼어 리스트 값으로 만듭니다. 이 문자열을 다시 합쳐서 'Python'으로 만들고 싶을 땐 어떻게 하면 될까요?

 

첫 번째로 for문을 써볼 수 있습니다. 

 

word='Python'
li=list(word) 
li_to_word=''

for w in li: # 리스트 안의 w를
    li_to_word+=w # 하나씩 더해준다
    
print(li_to_word)


>>> Python

 

파이썬에서 문자열 사이에 덧셈이 가능하기 때문에 쓸 수 있는 방법입니다. 하지만 리스트가 1,000개 이상의 값을 가지고 있다면 시간이 너무 많이 들겠죠. 그렇기 때문에 이런 상황에서는 보통 join을 사용합니다.

 

li_to_word=''.join(word)
print(li_to_word)
print(type(li_to_word))

>>> Python
>>> <class 'str'>

 

보다시피 쉽게 리스트를 문자열로 변환시킬 수 있습니다. 좀 더 join을 살펴볼까요? 

 

li_to_word='.'.join(word)
print(li_to_word)

li_to_word='&'.join(word)
print(li_to_word)


>>> P.y.t.h.o.n
>>> P&y&t&h&o&n

 

join의 앞에 들어가는 작은 따옴표(큰 따옴표도 될 수 있겠죠?) 사이에 무엇이 들어가느냐에 따라 리스트를 하나의 문자열로 합칠 때 나오는 값도 달라집니다. 처음에는 아무것도 넣지 않았기 때문에 문자열이 그대로 반환되었지만, 온점과 '&'을 넣었을 때는 리스트 값들 사이에 해당 부호들이 들어간 것을 볼 수 있습니다. 

 

그럼 위에서 썼던 for문으로 문자열들을 결합하는 방법과 join을 썼을 때, 두 가지 경우가 얼마나 차이나는지 비교해보겠습니다. 시간을 측정하기 위해 time 라이브러리의 time 함수를 사용했습니다. 

 

li=[i for i in range(100000)] # 숫자 10만 개로 채워진 리스트
li=list(map(str, li)) # int를 str으로 변환

 

for문을 썼을 때는 다음과 같습니다. 

 

start_time=time.time() # 연산 시작 시간

li_to_word=''

for w in li:
    li_to_word+=w
    
end_time=time.time() # 연산 종료 시간
   
# print(li_to_word)
print(end_time-start_time) # 연산에 걸린 총 시간


>>> 0.031000852584838867

 

join을 썼을 때는 다음과 같습니다. 

 

start_time=time.time()

li_to_word = ''.join(li)

end_time=time.time()

print(end_time-start_time)


>>> 0.002002239227294922

 

속도 차이를 알아보기 쉽도록 일부러 길이가 10만인 리스트를 사용했는데, 정말 차이가 많이 나는군요. 

리스트를 문자열로 결합해야 할 경우에는 편하게 join을 사용하면 될 것 같습니다!