Какой самый простой способ в Python заменить символ в строке?
Например:
text = "abcdefg";
text[1] = "Z";
^
Какой самый простой способ в 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 неизменяемы (т.е. они не могут быть изменены). много причин для этого. Используйте списки, пока у вас не будет выбора, только затем превратите их в строки.
Есть три способа. Для ищущих скорость я рекомендую "Способ 2"
Метод 1
Учитывая этот ответ
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
new = text[:1] + 'Z' + text[2:]
Строки Python неизменяемы, вы меняете их, создавая копию.
Самый простой способ сделать то, что вы хотите, возможно.
text = "Z" + text[1:]
Текст [1:] возвращает строку в тексте с позиции 1 до конца, количество позиций от 0, так что "1" является вторым символом.
изменить: Вы можете использовать один и тот же метод нарезки строк для любой части строки
text = text[:1] + "Z" + text[2:]
Или, если письмо появляется только после того, как вы можете использовать предложенный метод поиска и замены ниже
Начиная с python 2.6 и python 3 вы можете использовать bytearrays, которые изменяются (могут быть изменены по типу элементов, в отличие от строк):
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg
edit: Изменена str для s
edit2: Как упоминал в комментариях двухбитовый алхимик, этот код не работает с юникодом.
Как и другие люди, обычно строки Python должны быть неизменными.
Однако, если вы используете CPython, реализацию на python.org, можно использовать ctypes для изменения строковой структуры в памяти.
Вот пример, когда я использую эту технику для очистки строки.
Отметьте данные как чувствительные в python
Я упоминаю об этом ради полноты, и это должно быть вашим последним средством, поскольку оно хакерское.
Этот код не мой. Я не мог вспомнить форму сайта, где я взял ее. Интересно, что вы можете использовать это, чтобы заменить один или несколько символов одним или несколькими charectors. Хотя этот ответ очень поздний, новички, подобные мне (в любое время), могут оказаться полезными.
mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,
Собственно, со строками вы можете сделать что-то вроде этого:
oldStr = 'Hello World!'
newStr = ''
for i in oldStr:
if 'a' < i < 'z':
newStr += chr(ord(i)-32)
else:
newStr += i
print(newStr)
'HELLO WORLD!'
В принципе, я "добавляю" + "строки" вместе в новую строку:).
если ваш мир на 100% ascii/utf-8
(в это поле помещается множество вариантов использования):
b = bytearray(s, 'utf-8')
# process - e.g., lowercasing:
# b[0] = b[i+1] - 32
s = str(b, 'utf-8')
Python 3.7.3
Очень простой способ сделать это:
word = "Heloo World!"
word = word.replace(word[3], "l", 1)
print word
Вывод:
Hello World!