'str' 개체가 품목 할당을 지원하지 않습니다.
문자열에서 몇 글자를 읽고 싶습니다.s1
다른 끈으로 묶어서s2
.
단, 할당처s2[j]
에러가 표시됩니다.
s2[j] = s1[i]
# TypeError: 'str' object does not support item assignment
C에서는 다음과 같이 동작합니다.
int i = j = 0;
while (s1[i] != '\0')
s2[j++] = s1[i++];
Python에서의 나의 시도:
s1 = "Hello World"
s2 = ""
j = 0
for i in range(len(s1)):
s2[j] = s1[i]
j = j + 1
다른 답변은 맞지만 다음과 같은 작업을 수행할 수 있습니다.
>>> str1 = "mystring"
>>> list1 = list(str1)
>>> list1[5] = 'u'
>>> str1 = ''.join(list1)
>>> print(str1)
mystrung
>>> type(str1)
<type 'str'>
당신이 정말 원한다면요.
Python에서는 문자열은 불변하기 때문에 문자를 변경할 수 없습니다.
단, 다음 작업을 수행할 수 있습니다.
for c in s1:
s2 += c
이것이 동작하는 이유는, 다음의 숏컷이 되기 때문입니다.
for c in s1:
s2 = s2 + c
위에서는 반복할 때마다 새로운 스트링이 생성되어 그 새로운 스트링에 대한 참조가 저장됩니다.s2
.
할당
s2[j]
에러를 표시하다
문자열은 불변하기 때문에 C에서 한 작업은 Python에서는 가능하지 않습니다.대신 새 문자열을 만들어야 합니다.
문자열에서 몇 글자를 읽고 다른 문자열에 넣고 싶어요.
슬라이스 사용:
>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print(s2)
world!
Python의 문자열은 불변입니다(이 문자열은 변경할 수 없습니다).
여러분이 하고자 하는 일은 여러 가지 방법으로 이루어질 수 있습니다.
문자열을 복사합니다.
foo = 'Hello'
bar = foo
이전 문자열의 모든 문자를 결합하여 새 문자열을 만듭니다.
new_string = ''.join(c for c in oldstring)
슬라이스 및 복사:
new_string = oldstring[:]
퍼포먼스 방식
인덱스 치환을 자주 수행하는 경우 다른 데이터 구조로 변환하는 것이 보다 성능적이고 메모리의 콤팩트한 방법입니다.그런 다음 작업을 마치면 문자열로 다시 변환합니다.
리스트:
가장 쉽고 심플한 기능:
s = "TEXT"
s = list(s)
s[1] = "_"
s = "".join(s)
byearray(ASCII):
이 방법을 사용하면 메모리 사용량이 줄어듭니다.Python 에서는 싱글 엘리먼트 랜덤 액세스를 하고 있는 경우는, 메모리는 연속해 있습니다만, 이것은 그다지 문제가 되지 않습니다.
ENC_TYPE = "ascii"
s = "TEXT"
s = bytearray(s, ENC_TYPE)
s[1] = ord("_")
s = s.decode(ENC_TYPE)
byearray (UTF-32) :
보다 일반적으로 기본 ASCII 세트 이외의 문자에 대해서는 UTF-32(또는 경우에 따라서는 UTF-16)를 사용하는 것을 권장합니다.이것에 의해, 랜덤 액세스의 정렬이 보증됩니다.
ENC_TYPE = "utf32"
ENC_WIDTH = 4
def replace(s, i, replacement):
start = ENC_WIDTH * (i + 1)
end = ENC_WIDTH * (i + 2)
s[start:end] = bytearray(replacement, ENC_TYPE)[ENC_WIDTH:]
s = "TEXT HI ひ RA ら GA が NA な DONE"
s = bytearray(s, ENC_TYPE)
# Performs s[1] = "_"
replace(s, 1, "_")
s = s.decode(ENC_TYPE)
이 방법은 사용하는 것보다 메모리 콤팩트할 수 있습니다.list
더 많은 작업이 필요합니다.
다른 응답은 문자열을 목록으로 변환하거나 문자별로 새 문자열을 구성합니다.이러한 메서드는 특히 문자열이 큰 경우 비용이 많이 들 수 있습니다.대신 슬라이스를 사용하여 변경된 문자열의 앞뒤 부분을 가져와 새 문자열과 결합할 수 있습니다.
여기서는 Crowman의 답변에서 샘플 코드를 수정하여 목록으로 변환하는 대신 문자열 슬라이싱을 사용하여 문자열의 단일 문자를 바꿉니다.
>>> str1 = "mystring"
>>> pos = 5
>>> new_char = 'u'
>>> str2 = str1[:pos] + new_char + str1[pos+1:]
>>> print(str2)
mystrung
>>> type(str2)
<class 'str'>
특정 문자를 다른 문자와 교환하는 경우는, 다음의 방법을 사용할 수 있습니다.
def swap(input_string):
if len(input_string) == 0:
return input_string
if input_string[0] == "x":
return "y" + swap(input_string[1:])
else:
return input_string[0] + swap(input_string[1:])
str'은 불변의 데이터 유형입니다.따라서 str type 개체는 항목 할당을 지원하지 않습니다.
s1 = "Hello World"
s2 = ['']*len(s1)
j = 0
for i in range(len(s1)):
s2[j]=s1[i]
j = j + 1
print(''.join(s2)) # Hello World
이 솔루션은 어떻습니까?
str="Hello World"(문제의 설명) srr = str+ "
안녕하세요. 문자열 분할 방식을 사용해 보십시오.
i = "Hello world"
output = i.split()
j = 'is not enough'
print 'The', output[1], j
언급URL : https://stackoverflow.com/questions/10631473/str-object-does-not-support-item-assignment
'programing' 카테고리의 다른 글
Composer를 사용하여 특정 버전의 패키지를 설치하는 방법 (0) | 2022.09.14 |
---|---|
Http를 사용하여 응답 본문을 가져오는 방법URL 연결, 2xx 이외의 코드가 반환될 때? (0) | 2022.09.14 |
항아리 내의 파일 수정 (0) | 2022.09.14 |
HTML 파일은 소스만 보는 것이 아니라 GitHub에서 직접 실행할 수 있습니까? (0) | 2022.09.14 |
MySql 오류: 1364 필드 'display_name'에 기본값이 없습니다. (0) | 2022.09.13 |