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

130

Я хотел бы прочитать некоторые символы из строки и поместить их в другую строку (как мы это делаем в 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?

Расми Ранджан Наяк
источник
19
Кстати, не называйте свои переменные после встроенных функций python. Если вы используете здесь strв качестве переменной, вы не сможете выполнять преобразования строк str(var_that_is_not_a_string)или сравнения типов, например type(var_with_unknown_type) == str.
Джоэл Корнетт

Ответы:

100

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

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

for i in str:
    srr += i

Причина, по которой это работает, заключается в том, что это ярлык для:

for i in str:
    srr = srr + i

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

NPE
источник
Тогда, если бы я прочитал символы из строки и скопировал их куда-нибудь, как я могу это сделать?
Расми Ранджан Наяк
1
@RasmiRanjanNayak: Это зависит от того, что вам нужно делать с этими персонажами. В своем ответе я показал, как их можно добавить к другой строке.
NPE
Я хочу написать программу «Hello world» в «World Hello». Поэтому мой код должен искать пробел (''). Итак, я искал помощи
Расми Ранджан Наяк
5
@RasmiRanjanNayak:print " ".join(reversed("Hello world".split())).capitalize()
Джоэл Корнетт
2
@aix: Это произошло буквально в нескольких секундах друг от друга. : D
Джоэл Корнетт
113

Остальные ответы верны, но вы, конечно, можете сделать что-то вроде:

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

если очень хочешь.

Crowman
источник
14

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

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

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

>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print s2
world!
Wim
источник
5

Как упоминалось в aix, строки в 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[:]
Бурхан Халид
источник
1

Другой подход, если вы хотите поменять определенный символ на другого персонажа:

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:])
Жан-Эмиль Леконт II
источник
0

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

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

user2643900
источник
-2

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

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

j = 'is not enough'

print 'The', output[1], j
Devzzone
источник