이 글에서는 Python 프로그래밍에서 자주 마주치는 문제, 즉 리스트(list)를 문자열(string)로 변환하는 방법을 다양한 접근 방식과 함께 자세히 알아보겠습니다.
문제 정의
리스트 형태의 반복 가능한(iterable) 객체가 주어졌을 때, 이를 문자열 타입으로 변환해야 합니다. 예를 들어 ['Tutorials', 'Point']라는 리스트를 TutorialsPoint라는 하나의 문자열로 만드는 것이 목표입니다.
이 문제를 해결하는 대표적인 네 가지 방법이 있습니다. 하나씩 살펴보겠습니다.
1. 반복문을 이용한 기본(Brute-force) 방식
가장 직관적인 방법은 빈 문자열을 초기화한 뒤, 리스트의 각 요소를 순회하면서 하나씩 이어 붙이는 것입니다.
예제 코드
def listToString(s):
# 빈 문자열 초기화
str_ = ""
# 리스트 요소를 순회하며 연결
for ele in s:
str_ += ele
# 결과 문자열 반환
return str_
# 메인 실행부
s = ['Tutorials', 'Point']
print(listToString(s))실행 결과
TutorialsPoint
이 방식은 코드가 단순하고 이해하기 쉽다는 장점이 있지만, 문자열은 불변(immutable) 객체이기 때문에 요소를 붙일 때마다 새로운 문자열이 생성되어 리스트가 클 경우 성능이 떨어질 수 있습니다.
2. 내장 함수 join() 활용
Python에서 리스트를 문자열로 변환하는 가장 권장되는 표준적인 방법은 join() 메서드입니다. 구분자로 사용할 빈 문자열에 대해 join()을 호출하면 리스트의 모든 요소가 효율적으로 하나의 문자열로 합쳐집니다.
예제 코드
def listToString(s):
# join()으로 리스트 요소를 하나의 문자열로 결합
str_ = ""
return (str_.join(s))
# 메인 실행부
s = ['Tutorials', 'Point']
print(listToString(s))실행 결과
TutorialsPoint
join()은 내부적으로 한 번에 처리되므로 성능 면에서도 반복문 방식보다 훨씬 우수합니다. 참고로 요소 사이에 공백이나 쉼표 등 다른 구분자를 넣고 싶다면 ' '.join(s), ', '.join(s)처럼 구분자만 바꿔주면 됩니다.
3. 리스트 컴프리헨션(List Comprehension) 활용
리스트에 문자열이 아닌 숫자 등 다른 타입의 요소가 섞여 있을 수 있다면, 리스트 컴프리헨션과 함께 str() 함수를 사용해 각 요소를 먼저 문자열로 변환한 뒤 join()으로 결합하는 방법이 유용합니다.
예제 코드
def listToString(s):
# 각 요소를 str()로 변환한 후 join()으로 결합
str_ = ''.join([str(elem) for elem in s])
return str_
# 메인 실행부
s = ['Tutorials', 'Point']
print(listToString(s))실행 결과
TutorialsPoint
이 방식은 리스트 안에 정수나 실수 같은 비문자열 요소가 포함되어 있어도 오류 없이 처리할 수 있다는 점에서 안정성이 높습니다.
4. 내장 함수 map()과 join() 조합
map(str, s)를 사용하면 리스트의 모든 요소에 str() 변환을 한 번에 적용할 수 있습니다. 이를 join()과 조합하면 더욱 간결하고 가독성 좋은 한 줄 코드가 완성됩니다.
예제 코드
def listToString(s):
# map()으로 모든 요소를 문자열로 변환 후 join()
str_ = ''.join(map(str, s))
return str_
# 메인 실행부
s = ['Tutorials', 'Point']
print(listToString(s))실행 결과
TutorialsPoint
map()은 지연 평가(lazy evaluation) 방식으로 동작하므로, 리스트 컴프리헨션보다 메모리를 절약하면서 동일한 결과를 얻을 수 있습니다.
마무리
지금까지 Python에서 리스트를 문자열로 변환하는 네 가지 방법을 살펴보았습니다. 학습용으로는 반복문 방식이 좋지만, 실제 프로젝트에서는 join() 메서드를 사용하는 것이 성능과 가독성 측면에서 가장 권장됩니다. 또한 리스트에 다양한 타입의 요소가 포함될 가능성이 있다면 map(str, s) 또는 리스트 컴프리헨션과 조합하여 사용하는 것이 안전합니다.