← Назад к вопросам
Как изменить отдельный символ внутри строки?
1.0 Junior🔥 81 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Изменение отдельного символа внутри строки
В Python строки иммутабельны (неизменяемы), поэтому нельзя изменить символ напрямую. Нужно создать новую строку. Есть несколько способов.
Способ 1: Преобразование в список, затем обратно в строку
original = "hello"
pos = 1 # Позиция символа
neew_char = "a"
# Преобразуем строку в список (который изменяемый)
chars = list(original)
chars[pos] = new_char # Изменяем нужный символ
result = "".join(chars) # Объединяем обратно
print(result) # haello
Способ 2: Слайсинг и конкатенация
original = "hello"
pos = 1
new_char = "a"
# Берём до позиции + новый символ + после позиции
result = original[:pos] + new_char + original[pos+1:]
print(result) # haello
Способ 3: Использование f-strings и enumerate
original = "hello"
pos = 1
new_char = "a"
result = "".join(
new_char if i == pos else char
for i, char in enumerate(original)
)
print(result) # haello
Способ 4: Регулярные выражения
import re
original = "hello world"
# Заменить все 'l' на 'x'
result = original.replace("l", "x")
print(result) # hexxo worxd
# Заменить первое вхождение
result = original.replace("l", "x", 1)
print(result) # hexlo world
# Regex для сложных паттернов
result = re.sub(r"l", "x", original)
print(result) # hexxo worxd
Способ 5: Использование bytearray (для бинарных данных)
original = "hello"
bytes_arr = bytearray(original, "utf-8")
bytes_arr[1] = ord("a") # ord() для получения кода символа
result = bytes_arr.decode("utf-8")
print(result) # haello
Практические примеры
# 1. Функция для замены символа на позиции
def replace_char(string, pos, new_char):
if pos < 0 or pos >= len(string):
raise IndexError("Position out of range")
return string[:pos] + new_char + string[pos+1:]
print(replace_char("hello", 1, "a")) # haello
# 2. Заглавная первая буква
def capitalize_first(word):
return word[0].upper() + word[1:] if word else word
print(capitalize_first("hello")) # Hello
# 3. Маскирование данных (скрыть номер кредитной карты)
def mask_credit_card(card):
return card[:4] + "*" * (len(card) - 8) + card[-4:]
print(mask_credit_card("1234567890123456")) # 1234********3456
# 4. Замена множественных символов
def replace_multiple(string, replacements):
"""replacements: {'a': 'x', 'e': 'y'}"""
result = string
for old, new in replacements.items():
result = result.replace(old, new)
return result
print(replace_multiple("hello", {'e': 'a', 'o': 'u'})) # hallu
Производительность
import timeit
original = "hello world" * 1000
pos = 100
new_char = "x"
# Способ 1: list
time1 = timeit.timeit(
lambda: "".join(c if i != pos else new_char for i, c in enumerate(original)),
number=10000
)
# Способ 2: слайсинг
time2 = timeit.timeit(
lambda: original[:pos] + new_char + original[pos+1:],
number=10000
)
print(f"Generator: {time1}")
print(f"Slicing: {time2}")
# Обычно слайсинг быстрее для одной замены
Вывод
Рекомендуемые способы:
- Одна замена на позиции → слайсинг:
s[:pos] + new_char + s[pos+1:] - Несколько замен →
replace()илиtranslate() - Сложные паттерны → регулярные выражения
- Когда важна производительность → слайсинг или
str.translate()
Помни: строки в Python иммутабельны, поэтому всегда создаётся новая строка.