Этот простой код, который просто пытается заменить точки с запятой (в указанных i позициях) двоеточиями, не работает:
for i inrange(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 неизменяемы, поэтому вы не можете рассматривать их как список и присваивать индексам.
Если вам нужно заменить только определенные точки с запятой, вам нужно быть более конкретным. Вы могли бы использовать нарезку, чтобы изолировать раздел строки, который нужно заменить:
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 inenumerate(slist): if slist[i] == ';'and0 <= 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 inrange(0,len(line)): if (line[i]==";"): line = line[:i] + ":" + line[i+1:]