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

Какой самый простой способ в 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

Учитывая этот ответ

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:]

Текст [1:] возвращает строку в тексте с позиции 1 до конца, количество позиций от 0, так что "1" является вторым символом.

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

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

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

Ответ 5

Начиная с 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: Как упоминал в комментариях двухбитовый алхимик, этот код не работает с юникодом.

Ответ 6

Как и другие люди, обычно строки Python должны быть неизменными.

Однако, если вы используете CPython, реализацию на python.org, можно использовать ctypes для изменения строковой структуры в памяти.

Вот пример, когда я использую эту технику для очистки строки.

Отметьте данные как чувствительные в python

Я упоминаю об этом ради полноты, и это должно быть вашим последним средством, поскольку оно хакерское.

Ответ 7

Этот код не мой. Я не мог вспомнить форму сайта, где я взял ее. Интересно, что вы можете использовать это, чтобы заменить один или несколько символов одним или несколькими charectors. Хотя этот ответ очень поздний, новички, подобные мне (в любое время), могут оказаться полезными.

Изменить функцию текста.

mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,

Ответ 8

Собственно, со строками вы можете сделать что-то вроде этого:

oldStr = 'Hello World!'    
newStr = ''

for i in oldStr:  
    if 'a' < i < 'z':    
        newStr += chr(ord(i)-32)     
    else:      
        newStr += i
print(newStr)

'HELLO WORLD!'

В принципе, я "добавляю" + "строки" вместе в новую строку:).

Ответ 9

если ваш мир на 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

Ответ 10

Очень простой способ сделать это:

word = "Heloo World!"
word = word.replace(word[3], "l", 1)
print word

Вывод:

 Hello World!