← Назад к вопросам

Как изменить отдельный символ внутри строки?

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 иммутабельны, поэтому всегда создаётся новая строка.

Как изменить отдельный символ внутри строки? | PrepBro