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

Changing a character in a string

Изменение символа в строке

Какой самый простой способ в Python заменить символ в строке?

Например:

text = "abcdefg";
text[1] = "Z";
^
Переведено автоматически
Ответ 1

Не изменяйте строки.

Работайте с ними как со списками; превращайте их в строки только при необходимости.

>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'

Строки Python неизменяемы (т. Е. Их нельзя изменить). Для этого есть много причин. Используйте списки до тех пор, пока у вас не останется выбора, только тогда преобразуйте их в строки.

Ответ 2

Самый быстрый способ?

Есть три способа.
Для любителей скорости я рекомендую "Метод 2"

Метод 1:

Дано в ответе scvalex:

text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)

Это довольно медленно по сравнению с "Методом 2":

timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027

Метод 2 (БЫСТРЫЙ МЕТОД):

Дано в ответе Йохена Ритцеля:

text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]

Что намного быстрее:

timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195

Метод 3:

Массив байтов:

timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
Ответ 3
new = text[:1] + 'Z' + text[2:]
Ответ 4

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

text = "Z" + text[1:]

text[1:] Возвращает строку в text от позиции 1 до конца, позиции отсчитываются от 0, поэтому '1' является вторым символом.

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

text = text[:1] + "Z" + text[2:]

Или, если письмо отображается только после того, как вы можете использовать поиск и замену техника, предложенная
ниже

python string