파이썬/파이썬 기초

[Python] join 함수 : 구분자 문자열 리스트 결합하기(이어붙이기)

Song 컴퓨터공학 2023. 7. 4. 19:48

이번 포스팅은 파이썬 리스트를 문자열로 합쳐주는 join 함수에 대한 내용을 다룹니다. Join 함수는 리스트로 되어 있는 문자열 데이터들을 설정한 구분자(separator)로 구분하여 문자열 형태로 반환하는 내장 함수입니다. 문자열을 리스트 형태로 나누는 것을 split 함수라고 한다면, 리스트를 문자열로 바꾸는 것이니 split 의 반대 동작을 하는 함수라고 생각해주시면 됩니다. join 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수 입니다.

 

가장 먼저 알아야할 join 함수의 모양은 다음과 같습니다.

'구분자'.join(리스트)

 

 ''.join(리스트)

 

''.join(리스트) 는 매개변수로 들어온 [a', 'b, 'c'] 와 같은 리스트를 합쳐서 'abc' 라는 문자열로 반환해주는 함수입니다. 이 때 유의할 점은 " 는 큰따옴표 1개가 아니라 작은 따옴표 2개를 붙인 겁니다. 기본적인 형태가 '구분자'.join(리스트) 인데 구분자가 없는 것이죠. 따라서 매개변수 내 리스트의 문자열들을 이어 붙여서 반환해줍니다.

List = ["Song", "Computer", "Enginerring", "Blog"]
str = "".join(List)
print(str)

# 출력 : SongComputerEnginerringBlog

 

뭔가 가독성이 굉장히 떨어지는 것 같다면? 구분자에 공백 문자를 넣어줘서 출력하면 됩니다.

 

 ' '.join(리스트) : 공백 구분자

 

공백 구문자를 넣어주면 문자열을 합칠 때마다 공백을 추가해서 이어붙인 문자열을 반환합니다. 

List = ["Song", "Computer", "Enginerring", "Blog"]
str = ' '.join(List)
print(str)

# 출력 : Song Computer Enginerring Blog

 

백준 문제를 풀다가도 이런 형태가 제일 많이 사용됩니다. 공백을 넣어서 문자열을 이어붙이는 것이죠.  아래 코드와 동일한 코드입니다.

List = ["Song", "Computer", "Enginerring", "Blog"]
for x in List:
    print(x, end= ' ')
print()

 

한 가지만 응용을 보고 주의점에 대해 알아보도록 합시다.

 

 '/'.join(리스트)

List = ["Song", "Computer", "Enginerring", "Blog"]
str1 = '/'.join(List)
str2 = ' /= '.join(List)

print(str1)
print(str2)

# 출력
# Song/Computer/Enginerring/Blog
# Song /= Computer /= Enginerring /= Blog

구문자가 꼭 문자일 필요는 없습니다. 구분자에 문자열을 입력해도 연결할 때마다 이어 붙이는 것을 확인할 수 있습니다.

 

 

 join 사용 주의법 및 응용

 

join 함수는 리스트 내 str형만 합칠 수 있습니다. 따라서 아래와 같은 코드는 오류가 발생합니다.

a=[1,2,3,4]  #요소가 str형이 아니므로 에러 발생
a=''.join(a)
print(a)

#line 2, in <module>
#    a=''.join(a)
#TypeError: sequence item 0: expected str instance, int found

 

그렇다면 str 형이 아닌 요소를 포함하고 있는 list 에 join 함수를 적용하는 방법은? 바로 map(str, ~) 를 사용하는 겁니다.

print(' '.join(map(str, List)))

제 체감으로는 가장 많이 쓰이는 join 의 응용입니다. int 형 정수를 가진 리스트를 공백을 포함하여 출력하고 싶을 때 당연히 원소 출력 하고 공백 문자 출력하는 것을 반복문으로 돌려도 되지만, 오늘 배운 join 함수를 적용하기 위해 map 을 통해 원소를 모두 str 형으로 바꿔주고, 문자열 형태로 최종 답안을 출력하는 방식입니다.

위 코드를 이해할 필요는 없어서 코드는 생략했습니다. 빨간 박스만 보면 answer 라는 정수형 리스트를 출력하고, 그 다음으로 ' '.join(map(str,answer))) 를 통해 내부의 원소들을 공백을 추가해서 전부 출력하는 print 문을 사용합니다. 오른쪽의 출력과 비교해보면 ' '.join(map(str, answer))) 라는 코드가 무슨 역할을 하는지 알 수 있습니다.