Вопрос-Ответ

Replacing instances of a character in a string

Замена экземпляров символа в строке

Этот простой код, который просто пытается заменить точки с запятой (в указанных i позициях) двоеточиями, не работает:

for i in range(0,len(line)):
if (line[i]==";" and i in rightindexarray):
line[i]=":"

Выдает ошибку

line[i]=":"
TypeError: 'str' object does not support item assignment

Как я могу обойти это, заменив точки с запятой двоеточиями? Использование replace не работает, поскольку эта функция не принимает индекс - могут быть некоторые точки с запятой, которые я не хочу заменять.

Пример

В строке у меня может быть любое количество точек с запятой, например "Привет!; Привет всем ;!;"

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

Переведено автоматически
Ответ 1

Строки в python неизменяемы, поэтому вы не можете рассматривать их как список и присваивать индексам.

Используйте .replace() вместо:

line = line.replace(';', ':')

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

line = line[:10].replace(';', ':') + line[10:]

Это заменит все точки с запятой в первых 10 символах строки.

Ответ 2

Вы можете сделать следующее, чтобы заменить любой символ соответствующим символом с заданным индексом, если вы не хотите использовать .replace()

word = 'python'
index = 4
char = 'i'

word = word[:index] + char + word[index + 1:]
print word

o/p: pythin
Ответ 3

Преобразуйте строку в список; затем вы можете изменять символы по отдельности. Затем вы можете собрать их обратно с помощью .join:

s = 'a;b;c;d'
slist = list(s)
for i, c in enumerate(slist):
if slist[i] == ';' and 0 <= i <= 3: # only replaces semicolons in the first part of the text
slist[i] = ':'
s = ''.join(slist)
print s # prints a:b:c;d
Ответ 4

Если вы хотите заменить одну точку с запятой:

for i in range(0,len(line)):
if (line[i]==";"):
line = line[:i] + ":" + line[i+1:]

Однако я не тестировал это.

python string