Используйте метод replace() с аргументом count=1.
string = "hello world hello"
new_string = string.replace("hello", "hi", 1) 
print(new_string) # Вывод: hi world helloСуществует несколько способов заменить только первое вхождение символа в строке Python. Вот несколько распространенных:
replace() с параметром count:
      Метод replace() позволяет указать максимальное количество замен.  Если передать count=1, то заменится только первое вхождение.
string = "Hello world, world!"
new_string = string.replace("world", "Python", 1)
print(new_string)  # Output: Hello Python, world!
find() и срезов строк:
      Сначала находим индекс первого вхождения подстроки с помощью find().  Затем, используя срезы строк, собираем новую строку, заменяя найденную подстроку.
string = "Hello world, world!"
index = string.find("world")
if index != -1:  # Проверяем, что подстрока найдена
  new_string = string[:index] + "Python" + string[index + len("world"):]
  print(new_string)  # Output: Hello Python, world!
else:
  print("Подстрока не найдена")
re):
       Модуль re позволяет использовать регулярные выражения.  Функция re.sub()  с параметром count=1 выполняет замену только первого вхождения.
import re
string = "Hello world, world!"
new_string = re.sub("world", "Python", string, 1)
print(new_string) # Output: Hello Python, world!
Выбор метода:
replace() с count=1 обычно самый простой и эффективный способ для простых замен.find() полезны, если нужно больше контроля над процессом или нужно выполнить какие-то дополнительные операции при замене.re.sub()) необходимы, если требуется замена с использованием более сложных шаблонов, например, когда нужно заменить первое вхождение определенного паттерна.В зависимости от контекста задачи, один из этих подходов может быть более подходящим, чем другие. Важно понимать преимущества и недостатки каждого метода.