programing

'str' 개체가 품목 할당을 지원하지 않습니다.

randomtip 2022. 9. 14. 21:59
반응형

'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

반응형