2010-01-29 4 views
8

파이썬에서는 문자열이 변경 가능합니까? 라인 someString[3] = "a" 오류파이썬에서 문자열의 한 문자 바꾸기

TypeError: 'str' object does not support item assignment

내가 왜 (내가 쓴 수 있기 someString [3] = "테스트"하고 분명히 불법 것) 볼 수 있습니다을 던졌습니다하지만 파이썬에서이 작업을 수행하는 방법이있다?

+0

특정 조건에서 특정 0을 1로 바꾸고 싶습니다. – Chris

+0

그러나 일반적으로 특정 문자 x를 y로 바꾸고 싶습니다. 지금은 바이너리 문자열을 다루고 있지만 일반적인 질문이다. – Chris

+0

또 다른 팁 : "바이너리 문자열", 즉 1s와 0s만으로 구성된 문자열을 사용하는 경우 BitVector와 같은 라이브러리를보다 빠르고 편리하게 사용할 수있다. 비트 벡터 조작. 파이썬의 비트 벡터에 대한 질문은 http://stackoverflow.com/questions/2147848/how-do-i-represent-and-work-with-n-bit-vectors-in-python/2147873을 참조하십시오. # 2147873 –

답변

13

파이썬 문자열은 변경할 수 없으므로 항목 또는 슬라이스 지정을 지원하지 않습니다. 즉 someString[:3] + 'a' + someString[4:] 또는 다른 적절한 접근 방식을 사용하여 새 문자열을 만들어야합니다.

8

대신 문자열로 값을 저장, 당신은 문자의 목록을 사용할 수 있습니다 : 당신이 그것을 표시하는 문자열로 다시 변환 할 경우

>>> l = list('foobar') 
>>> l[3] = 'f' 
>>> l[5] = 'n' 

를, 이것을 사용 :

>>> ''.join(l) 
'foofan' 

많은 문자를 한 번에 하나씩 변경하는 경우이 방법은 문자를 변경할 때마다 새로운 문자열을 작성하는 것보다 훨씬 빠릅니다.

+1

나는 또한이 대답을 정말로 좋아한다. 엄청 고마워. Python 스타일의 프로그래밍에 익숙해 져야합니다. – Chris

+0

@Chris :이 책을 매우 추천합니다 : http://www.amazon.ca/Programming-Python-Complete-Introduction-Language/dp/0137129297/ref=sr_1_6? ie = UTF8 & s = books & qid = 1264800285 & sr = 8-6 – MikeyB

2

새로운 비단뱀에서는 변경할 수있는 내장형 bytearray 유형을 사용할 수도 있습니다. stdlib 문서를 참조하십시오. 그러나 "충분히 새로운"은 2.6 이상을 의미하므로 반드시 그런 것은 아닙니다.

오래된 비단뱀의 경우 위에서 설명한대로 신선한 str을 만들어야합니다. 그 이유는 변경 될 수 없기 때문입니다. 이는 일반적으로 가장 읽기 쉬운 방법이지만 다른 종류의 변경 가능한 시퀀스 (예 : 문자 목록 또는 아마도 array.array)를 사용하는 것이 좋습니다. array.array은 약간 어색하지만 일반적으로 피해야합니다.

1
>>> import ctypes 
>>> s = "1234567890" 
>>> mutable = ctypes.create_string_buffer(s) 
>>> mutable[3] = "a" 
>>> print mutable.value 
123a567890