Какой самый простой способ в Python заменить символ в строке?
Например:
text = "abcdefg";
text[1] = "Z";
^
Не изменяйте строки.
Работать с ними как списками; превращайте их в струны только при необходимости.
>>> 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 являются неизменяемыми (то есть они не могут быть изменены). Есть много причин для этого. Используйте списки, пока у вас нет выбора, только затем превратите их в строки.
MID
из-за кусочков:s[:index] + c + s[index+1:]
Самый быстрый способ?
Есть три способа. Для ищущих скорость я рекомендую «Метод 2»
Способ 1
Данный ответ
Что довольно медленно по сравнению с «Методом 2»
Метод 2 (БЫСТРЫЙ МЕТОД)
Данный ответ
Который намного быстрее:
Способ 3:
Байтовый массив:
источник
timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
два раза медленнее, чем самый быстрый.источник
Строки Python неизменны, вы меняете их, делая копию.
Вероятно, самый простой способ сделать то, что вы хотите, это:
В
text[1:]
возвращает строку вtext
от позиции 1 до конца, позиция считать от 0 , так «1» второго символ.редактировать: вы можете использовать ту же технику нарезки строк для любой части строки
Или, если буква появляется только один раз, вы можете использовать метод поиска и замены, предложенный ниже
источник
Начиная с python 2.6 и python 3 вы можете использовать байт-массивы, которые являются изменяемыми (могут изменяться поэлементно в отличие от строк):
редактировать: изменен str на s
edit2: Как отметил в комментариях Two-Bit Alchemist, этот код не работает с юникодом.
источник
bytearray(s)
, а неbytearray(str)
. С другой стороны , это будет производить:TypeError: string argument without an encoding
. Если вы укажете кодировку, то вы получитеTypeError: an integer is required
. Это с Python 3 или Unicode Python 2. Если вы сделаете это в Python 2 (с исправленной второй строкой), это не сработает для не-ASCII символов, потому что они могут быть не одним байтом. Попробуйте,s = 'Héllo'
и вы получите'He\xa9llo'
.s = u'abcdefg'
.Как говорили другие люди, обычно строки Python должны быть неизменяемыми.
Однако, если вы используете CPython, реализацию на python.org, можно использовать ctypes для изменения строковой структуры в памяти.
Вот пример, где я использую технику, чтобы очистить строку.
Пометить данные как чувствительные в Python
Я упоминаю это для полноты картины, и это должно быть вашим последним средством, так как оно хакерское.
источник
str
это не тот тип, который вам подходит. Просто не используйте это. Используйте что-то вродеbytearray
этого. (Еще лучше, оберните его во что-то, что позволит вам более или менее обрабатывать его как непрозрачные данные, чтобы вы действительно не могли извлечьstr
из него данные, чтобы защитить вас от несчастных случаев. Для этого может быть библиотека. Не знаю.)Этот код не мой. Я не мог вспомнить форму сайта, где я ее взял. Интересно, что вы можете использовать это, чтобы заменить одного или нескольких персонажей одним или несколькими персонажами. Хотя этот ответ очень запоздал, новички вроде меня (в любое время) могут найти его полезным.
Функция изменения текста.
источник
l
.mytext = mytext.replace('l', 'W')
->HeWWo Zorld
mytext = mytext.replace('l', 'W',1)
. Ссылка на докНа самом деле, со строками вы можете сделать что-то вроде этого:
По сути, я «добавляю» + «строки» вместе в новую строку :).
источник
если ваш мир на 100%
ascii/utf-8
(в эту коробку помещается множество вариантов использования):Python 3.7.3
источник
Я хотел бы добавить еще один способ изменения символа в строке.
Насколько быстрее это по сравнению с превращением строки в список и заменой i-го значения с последующим присоединением снова?
Список подход
Мое решение
источник