Найти - Пользователи
Полная версия: Изменить букву в слове
Начало » Python для новичков » Изменить букву в слове
1 2 3
Straik32423
Привет. Есть ли возможность, не применяя срезы, заменить букву в слове, зная ее индекс?

Мне нужно заменить не какую-то конкретную букву на другую, а букву под конкретным индексом на другую.
old_monty
>>> word = 'hallo'    # слово с опечаткой
>>> new_word = ''     # заводим новое пустое слово, т.к. строки в Python неизменяемые
>>> for ch in word:
...    if ch == word[1]:
...       new_word += 'e'  # исправляем опечатку
...    else:
...       new_word += ch
... 
>>> new_word    # новое слово
'hello'
>>> word        # старое слово 
'hallo'

P.S. Это, конечно, изобретение велосипеда. Вообще-то в Python есть библиотечная функция replace() для замены подстроки в строке. Она тоже возвращает новую строку:
>>> word = 'hallo'
>>> print(word.replace(word[1], 'e'))
hello
>>> 
marvellik
преобразуй слово в список меняй букву в списке по индексу.возращай слово из списка методом join()
Straik32423
marvellik
преобразуй слово в список меняй букву в списке по индексу.возращай слово из списка методом join()
Было лень ждать ответа, пришлось немного попариться со срезами. Но спасибо за совет на будущее.
marvellik
old_monty
Вообще-то в Python есть библиотечная функция replace()
но replace() заменит все вхождения одной буквы на другую а не одну конкретную букву

word = 'катапульта'
print(word.replace('а','о'))
>>> котопульто
old_monty
marvellik
но replace() заменит все вхождения одной буквы на другую а не одну конкретную букву
Это только если не указать опциональный 3-й параметр - макс. количество замен. Если указать 1, то будет:
>>> word = 'катапульта'
>>> print(word.replace('а', 'о', 1))
котапульта
>>> 
doza_and
Straik32423
Есть ли возможность, не применяя срезы, заменить букву в слове, зная ее индекс?
В питоне вообще нет возможности заменить букву. Строки это константные объекты.

Можно сделать новую строку
import re
a="abcd12345"
print(re.sub("^(.{2}).",r"\1_",a))
>>> 
ab_d12345

py.user.next
Straik32423
Есть ли возможность, не применяя срезы, заменить букву в слове, зная ее индекс?
>>> s = 'abcde'
>>> 
>>> lst = list(s)
>>> lst[2] = 'x'
>>> 
>>> s = ''.join(lst)
>>> s
'abxde'
>>>
JOHN_16
old_monty
да нет же! а если буква находится дальше в слове? replace здесь не подходит
old_monty
JOHN_16
Если заменяемая буква находится дальше в слове, эту проблему можно легко обойти, включив в замену соседние буквы:
>>> wrong_word = 'кОтОпульта'
>>> correct_word = wrong_word.replace('тОп', 'тАп')
>>> print(correct_word)
кОтАпульта
>>> 
Может это и не истинный pythonic style, зато просто и надежно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB