Замена символа в строке
Вопрос: Как в Python проще всего заменить символ в строке?
Я столкнулся с проблемой при попытке заменить символ в строке. Например, у меня есть следующая строка:
text = "abcdefg"
text[1] = "Z" # Здесь возникает ошибка
Я получаю ошибку, потому что строки в Python неизменяемы (immutable). Мне нужно понять, какой подход будет самым простым для замены символа в строке. На примере выше я хотел бы заменить символ 'b' на 'Z', чтобы получить строку "aZcdefg". Какие существуют методы для решения этой задачи?
5 ответ(ов)
В вашем коде вы создаёте новую строку, в которой заменяете второй символ строки text
на букву 'Z'. Вот что делает каждая часть выражения:
text[:1]
— это берёт подстроку, начиная с начала строкиtext
и до (но не включая) второго символа. То есть, это будет первый символ.'Z'
— это просто буква, которой вы хотите заменить второй символ.text[2:]
— это берёт подстроку, начиная со второго индекса и до конца строки, то есть все символы, начиная с третьего.
В результате вы получаете новую строку, которая состоит из первого символа, буквы 'Z' и всех символов, начиная с третьего. Если вы хотите заменить именно второй символ (индекс 1) в строке, то ваш код правильно выполняет эту задачу.
Если text
— это строка, например, 'Hello'
, то будет:
new = text[:1] + 'Z' + text[2:] # Результат: 'HZllo'
Таким образом, если вы хотите изменить только один символ в строке, именно такой синтаксис будет правильным. На практике не забывайте, что строки в Python неизменяемы, и всякий раз, когда вы "изменяете" строку, вы создаёте новую.
В Python строки являются неизменяемыми, и вы изменяете их, создавая копию.
Самый простой способ сделать то, что вы хотите, вероятно, будет следующим:
text = "Z" + text[1:]
Здесь text[1:]
возвращает строку text
, начиная с позиции 1 и до конца. Нумерация позиций начинается с 0, поэтому '1' — это второй символ.
РЕДАКТИРОВАНИЕ: Вы можете использовать ту же технику нарезки строк для любой части строки:
text = text[:1] + "Z" + text[2:]
Если буква встречается только один раз, вы также можете использовать технику поиска и замены, предложенную ниже.
Начиная с Python 2.6 и в Python 3 вы можете использовать bytearray
, которые изменяемы (то есть элементы можно изменять по отдельности, в отличие от строк):
s = "abcdefg"
b_s = bytearray(s)
b_s[1] = ord("Z") # Используем ord, чтобы получить числовое значение символа
s = str(b_s)
print s
Обратите внимание, что в оригинальном примере вы пытались присвоить строку символа (в данном случае "Z") элементу bytearray
, что вызовет ошибку. Вместо этого вам нужно использовать функцию ord()
, чтобы получить числовое значение символа, что правильно позволяет заменить элемент в bytearray
.
Редактирование: Заменил строку на ord("Z")
.
Редактирование 2: Как упомянул Two-Bit Alchemist в комментариях, этот код не работает с юникодом. Если вы работаете с юникодными строками, вам нужно использовать bytes
и правильно управлять кодировками. Например:
s = u"abcdefg"
b_s = bytearray(s.encode('utf-8'))
b_s[1] = ord("Z")
s = b_s.decode('utf-8')
print(s)
Это обеспечит правильную работу с юникодными символами.
В Python строки являются неизменяемыми, что означает, что вы не можете изменить существующую строку. Однако, если вам нужно изменить какой-либо символ в строке, вы можете создать новую строку следующим образом:
def replace(s, position, character):
return s[:position] + character + s[position+1:]
Например, вызов функции replace('King', 1, 'o')
вернёт:
// результат: Kong
Обратите внимание: если вы передадите значение position
, большее длины строки, символ будет добавлен в конец.
Например, replace('Dog', 10, 's')
вернёт:
// результат: Dogs
Этот код не мой. Я не могу вспомнить, с какого сайта я его взял. Интересно, что его можно использовать для замены одного символа или нескольких символов на один или несколько других символов. Хотя этот ответ очень запоздалый, novice-сообщества (например, такие как я) могут найти его полезным в любое время.
Функция изменения текста
mytext = 'Hello Zorld'
# заменяем все Z на "W"
while "Z" in mytext:
# замена "Z" на "W"
mytext = mytext.replace('Z', 'W')
print(mytext)
Этот код заменяет все вхождения буквы "Z" в строке mytext
на букву "W". Метод replace()
используется в цикле while
, чтобы гарантировать, что все "Z" будут заменены, даже если в строке их несколько. Вывод программы будет: Hello World
.
Есть ли в Python метод подстроки 'contains' для строк?
Объединение двух столбцов текста в DataFrame pandas
Вывод строки в текстовый файл
Преобразование всех строк в списке в целые числа
Как извлечь числа из строки в Python?