본문 바로가기

파이썬/잡기술

파이썬 문자열 index기반으로 변경하기

파이썬의 string은 index기반으로 특정 문자를 바꾸는 게 불가능하여 성가신 상황들이 종종있다.
그래서 그걸 가능하게 하려면 그 부분만 제외해서 슬라이싱 후 (슬라이싱1 + 새로운문자 + 슬라이싱2)와 같이 복잡하고 비효율적인 방법으로 해결해야한다. 이게 문자 하나만 바꾸고 말거라면 다행이지만 엄청나게 많은 문자들에 대해서 이런 작업들을 해야한다면? 끔찍하다.

 

다행히도 마음에 드는 괜찮은 잡기술이 하나 있다.

 

a = "abcd"
b = list(a)

b[1] = 'z'

a = "".join(b)
print(a)

 

list로 바꿔주고 join을 통해 string으로 엮어내는 코드 가운데에 원하는데로 자유롭게 indexing하며 수정하면 된다. C에서 문자열을 다룰 때 처럼 말이다. (다만 파이썬의 리스트는 C배열과는 달리 많은 부분에서 자동화가 되어있는 동적배열구조이기 때문에 어떤 인덱스의 값이 삭제되면 뒤의 값들이 당겨져 오는 것 등을 주의해야한다.)

 

참고로 join은 split의 반대되는 기능으로 split이 토큰을 제거하며 문자열을 리스트로 잘라준다면 join은 토큰을 접착제 삼아 리스트 요소들을 문자열로 합쳐주는 역할을 한다. 위 예시의 경우 토큰이 없기 때문에 리스트의 요소들을 그대로 이어붙인다.