Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)에서 인덱스를 이용해 문자열의 특정 문자 변경하기

문제 상황

문자열 s, 인덱스 i, 문자 c가 주어졌을 때, s의 i번째 문자를 c로 교체하는 프로그램을 작성해야 한다고 가정해 보겠습니다.

그런데 파이썬에서 문자열은 불변(immutable) 자료형입니다. 따라서 s[i] = c처럼 인덱스로 직접 값을 할당하려 하면 아래와 같은 오류가 발생합니다.

[TypeError: 'str' object does not support item assignment]

예를 들어 입력이 s = "python", i = 3, c = 'P'라면, 기대되는 출력은 "pytPon"입니다.

해결 방법

문자열을 슬라이싱하여 두 부분으로 나눈 뒤, 교체할 문자를 사이에 끼워 다시 연결하는 방식으로 해결할 수 있습니다. 구체적인 단계는 다음과 같습니다.

  • left : 인덱스 0부터 i 앞까지의 부분 문자열 (s[:i])
  • right : 인덱스 i+1부터 끝까지의 부분 문자열 (s[i+1:])
  • left + c + right : 세 부분을 순서대로 연결한 새 문자열을 반환

구현 예제

아래 코드를 통해 실제 동작을 확인해 보겠습니다.

def solve(s, i, c):
   left = s[:i]
   right = s[i+1:]
   return left + c + right

s = "python"
i = 3
c = 'P'
print(solve(s, i, c))

입력

python, 3, 'P'

출력

pytPon

참고: 다른 접근 방법

문자열을 리스트로 변환한 뒤 해당 위치의 값을 수정하고, 다시 join()으로 합치는 방법도 널리 사용됩니다.

def solve(s, i, c):
    chars = list(s)
    chars[i] = c
    return ''.join(chars)

두 방법 모두 시간 복잡도는 O(n)으로 동일하지만, 슬라이싱 방식이 코드가 더 간결하고 파이썬다운 표현이라는 점에서 선호되는 편입니다. 어떤 방법을 선택하든 원본 문자열은 변경되지 않고 항상 새로운 문자열이 생성된다는 점을 기억해 두면 좋습니다.