#python #алгоритм #python_3x #список
Нужно найти в списке слов все слова на букву "в", и заменить букву "в" на букву "а" во всех словах. Как это сделать, без разбивания каждого слова на буквы и замены по индексу. Пример: Вход: a=['рука', 'нож', 'ведро', 'Неаполь', 'Виктория', 'материк'] Выход: a=['рука', 'нож', 'аедро', 'Неаполь', 'аиктория', 'материк']
Ответы
Ответ 1
Для списка: import re In [143]: print(a) ['рука', 'нож', 'ведро', 'Неаполь', 'Виктория', 'материк', 'бровь'] In [144]: new = [re.sub(r'^в', r'а', word, flags=re.U|re.I) for word in a] In [145]: print(new) ['рука', 'нож', 'аедро', 'Неаполь', 'аиктория', 'материк', 'бровь'] # ^ Для строки: import re s = 'Нужно найти в списке слов все слова на букву "в", и заменить букву "в" на букву "а" во всех словах. Как ето сделать, без разбивания каждого слова на буквы и замены по индексу. Большое Спасибо!' new = re.sub(r'\bв', r'X', s, flags=re.UNICODE) print(new) Результат: Нужно найти X списке слов Xсе слова на букву "X", и заменить букву "X" на букву "а" Xо Xсех словах. Как ето сделать, без разбивания каждого слова на б уквы и замены по индексу. Большое Спасибо!Ответ 2
Чтобы большую и маленькую "в" заменить на маленькую "а" в каждом слове в списке (не только в начале слова): table = str.maketrans("вВ", "аа") result = [word.translate(table) for word in a] Или, не создавая новый список: for i, word in enumerate(a): a[i] = word.translate(table) Чтобы заменить "в" только в начале слова: result = ["а" + word[1:] for word in a if word[0] in "вВ"]) Или, не создавая новый список: for i, word in enumerate(a): if word[0] in "вВ": a[i] = "а" + word[1:] Если буква у вас может более одной Unicode code point занимать, к примеру "ё" в NFD форме (буквальное сравнение): if word.startswith(letter): a[i] = replacement + word[len(letter):]Ответ 3
replace = lambda s: 'а%s'%s[1:] if s.startswith('в') else s list(map(replace, a))
Комментариев нет:
Отправить комментарий