Объект 'str' не поддерживает назначение элементов в Python

Я хотел бы прочитать некоторые символы из строки и поместить ее в другую строку (как мы делаем в C).

Так что мой код, как показано ниже

import string
import re
str = "Hello World"
j = 0
srr = ""
for i in str:
    srr[j] = i #'str' object does not support item assignment 
    j = j + 1
print (srr)

В C код может быть

i = j = 0; 
while(str[i] != '\0')
{
srr[j++] = str [i++];
}

Как я могу реализовать то же самое в Python?

11 ответов

Решение

В Python строки являются неизменяемыми, поэтому вы не можете менять их символы на месте.

Вы можете, однако, сделать следующее:

for i in str:
    srr += i

Это работает потому, что это ярлык для:

for i in str:
    srr = srr + i

Приведенное выше создает новую строку с каждой итерацией и сохраняет ссылку на эту новую строку в srr,

Другие ответы верны, но вы, конечно, можете сделать что-то вроде:

>>> str1 = "mystring"
>>> list1 = list(str1)
>>> list1[5] = 'u'
>>> str1 = ''.join(list1)
>>> print(str1)
mystrung
>>> type(str1)
<type 'str'>

если ты действительно хочешь.

Строки Python являются неизменяемыми, поэтому то, что вы пытаетесь сделать в C, будет просто невозможно в Python. Вам нужно будет создать новую строку.

Я хотел бы прочитать некоторые символы из строки и поместить ее в другую строку.

Затем используйте фрагмент строки:

>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print s2
world!

Как уже упоминалось, строки в Python являются неизменяемыми (вы не можете изменить их на месте).

То, что вы пытаетесь сделать, может быть сделано разными способами:

# Copy the string

foo = 'Hello'
bar = foo

# Create a new string by joining all characters of the old string

new_string = ''.join(c for c in oldstring)

# Slice and copy
new_string = oldstring[:]

Исполнительские методы

Если вы часто выполняете замену индекса, более производительным и компактным для памяти методом является преобразование в другую структуру данных. Затем преобразуйте обратно в строку, когда закончите.

список:

Самый простой и простой:

      s = "TEXT"
s = list(s)
s[1] = "_"
s = "".join(s)

bytearray (ASCII):

Этот метод использует меньше памяти. Память также является непрерывной, хотя в Python это не имеет большого значения, если вы все равно выполняете одноэлементный произвольный доступ:

      ENC_TYPE = "ascii"
s = "TEXT"
s = bytearray(s, ENC_TYPE)
s[1] = ord("_")
s = s.decode(ENC_TYPE)

bytearray (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)

Хотя этот метод может быть более компактным, чем использование , это требует гораздо больше операций.

Другие ответы преобразуют строку в список или создают новую строку символ за символом. Эти методы могут быть дорогостоящими, особенно для больших строк. Вместо этого мы можем использовать нарезку, чтобы получить части строки до и после измененного символа и объединить их с новым символом.

Здесь я изменяю пример кода из ответа Кроумана, чтобы заменить один символ в строке, используя нарезку строки вместо преобразования в список.

      >>> 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:])

В ситуации моего гениального новичка я пытался неправильно добавить ключи/значения в словарь. вот так.

      mydict = {}
mydict = mydict['my_key'] = 'my_value'

Где это должно быть.

      mydict['my_key'] = 'my_value' 

Привет, вы должны попробовать метод разделения строк:

i = "Hello world"
output = i.split()

j = 'is not enough'

print 'The', output[1], j

Как насчет этого решения:

str = "Hello World" (как указано в проблеме) srr = str+ ""

«str» — это неизменяемый тип данных. Поэтому объект типа str не поддерживает назначение элементов.

      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
Другие вопросы по тегам