Как заменить символ в строке python по индексу
Перейти к содержимому

Как заменить символ в строке python по индексу

  • автор:

Как заменить символ строки на индекс этого символа в массиве?

Мой код: https://pastebin.com/JrPLJEsX
Нужно заменить символ в строке word на его индекс+1 в массиве alpha.
Метод s.replace() вместо замененной строки выдает ту же самую, что я ввел.
Изначально alpha был строкой, но вывод был тем же.

  • Вопрос задан более трёх лет назад
  • 606 просмотров

1 комментарий

Простой 1 комментарий

TosterModerator

Модератор @TosterModerator
Код должен быть прямо в вопросе.
Решения вопроса 0
Ответы на вопрос 3

Потому что replace не меняет оригинал, а только возвращает измененную строку, т.е. нужно переприсваивать.
Но для подобной замены по словарю (набор значений меняется на другой набор значений) лучше использовать translate (в параметрах передаем пары «символ»:»индекс + 1″), без всяких дополнительных циклов.

word = word.translate(str.maketrans())

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

trapwalker

Сергей П @trapwalker Куратор тега Python
Программист, энтузиаст

alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alpha_map = word = input() new_word = ''.join(f' ' if idx else orig for idx, orig in ((alpha_map.get(c), c) for c in word)) print(new_word)

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

word = ''.join(str(alpha.index(i)+1) for i in word)

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Почему при большом количестве строк async выдает ошибку?

  • 1 подписчик
  • час назад
  • 15 просмотров

Замена символов в строке по индексу

Доброго времени суток!
Такая вот задача:
Дано предложение. Все его символы, стоящие на третьем, шестом, девятом и т. д. местах, заменить буквой а.
Не могу никак понять как задать, чтобы менялся каждый символ через 3.
Буду признателен за помощь!

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Замена символа в строке по индексу
Доброе утро. Есть строка типа "347F93001850767F008000FEFFFFFFFF", из нее через Substring.

Однократная замена текста в строке по индексу
Есть строка (получена из файла). Необходимо найти текст от определенного индекса необходимой длины.

Замена символов в строке
Помогите пожалуйсто!Сделал в АВС ,переписал в турбо паскаль,программа должна заменять символ строки.

Замена символов в строке
Добрый день, уважаемые. В таблице есть строки такого вида.

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

for i in range(3, len(s), step=3): #. 

Регистрация: 13.04.2021
Сообщений: 33
Не могли бы подсказать, почему выдает ошибку?

1 2 3 4 5 6 7 8 9
#!/usr/bin/env python3 # -*- coding: utf-8 -*- if __name__ == '__main__': pr = input("Введите предложение: ") s = '' for i in range(3, len(pr), step=3): s += 'a' print("Замена произведена:", s)

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

Лучший ответ

Сообщение было отмечено pretty boyyy как решение

Решение

pretty boyyy, ошибок на самом деле вагон.
Строки неизменяемы. А посему нужно собирать новую, с заменой по ходу дела.
Например так

1 2 3 4 5 6 7 8
pr = input("Введите предложение: ") s = '' for i in range(len(pr)): if i % 3 == 0 and i != 0: s += 'a' else: s += pr[i] print("Замена произведена:", s)

Регистрация: 13.04.2021
Сообщений: 33
Огромное спасибо!
Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

pretty boyyy, да на здоровье!

634 / 474 / 179
Регистрация: 28.05.2012
Сообщений: 1,411
iSmokeJC, Ваш код замену начинает с 4 элемента.
Введите предложение: oooooooooo
Замена произведена: oooaooaooa
Малость подправил Ваш код:

1 2 3 4 5 6 7 8
pr = input("Введите предложение: ") s = '' for i in range(1, len(pr)): if i % 3 == 0: s += 'a' else: s += pr[i] print("Замена произведена:", s)

Введите предложение: oooooooooo
Замена произведена: ooaooaooa
Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18968 / 9663 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473

Цитата

Сообщение от Vigi

начинает с 4 элемента

Можно и поспорить, только вот надо ли? Самое распространенное разночтение — имеется ввиду порядковый номер или таки индекс?

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Замена символов в строке
В общем, я не понимаю логики программирования, потому что я идиот 🙂 Задание: Ввести строку.

Замена символов в строке
Надо написать программу, которая будет считывать строку, и заменять определенный.

Замена символов в строке
Требуется заменить некоторые символы в строке на другие. Никакой математической закономерности в.

Замена символов в строке
Здравствуйте! Помогите, пожалуйста, решить задачу на строки: Составить программу, которая вводит.

Замена символов в строке
Не получается сделать замену символов. Если в строке есть буква "H" мне нужно заменить её на "HOH".

Замена символов в строке
Как в С# в произвольном тексте заменить букву т на букву д и букву д на букву т. Помогите.

Строки. Функции и методы строк

Python 3 логотип

Итак, о работе со строками мы немного поговорили, теперь поговорим о функциях и методах строк.

Я постарался собрать здесь все строковые методы и функции, но если я что-то забыл — поправляйте.

Базовые операции

  • Конкатенация (сложение)

При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.

  :  Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.

Таблица «Функции и методы строк»

Функция или метод Назначение
S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» Литералы строк
S = «s\np\ta\nbbb» Экранированные последовательности
S = r»C:\temp\new» Неформатированные строки (подавляют экранирование)
S = b»byte» Строка байтов
S1 + S2 Конкатенация (сложение строк)
S1 * 3 Повторение строки
S[i] Обращение по индексу
S[i:j:step] Извлечение среза
len(S) Длина строки
S.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1
S.rfind(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или -1
S.index(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError
S.rindex(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError
S.replace(шаблон, замена[, maxcount]) Замена шаблона на замену. maxcount ограничивает количество замен
S.split(символ) Разбиение строки по разделителю
S.isdigit() Состоит ли строка из цифр
S.isalpha() Состоит ли строка из букв
S.isalnum() Состоит ли строка из цифр или букв
S.islower() Состоит ли строка из символов в нижнем регистре
S.isupper() Состоит ли строка из символов в верхнем регистре
S.isspace() Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы (‘\f’), «новая строка» (‘\n’), «перевод каретки» (‘\r’), «горизонтальная табуляция» (‘\t’) и «вертикальная табуляция» (‘\v’))
S.istitle() Начинаются ли слова в строке с заглавной буквы
S.upper() Преобразование строки к верхнему регистру
S.lower() Преобразование строки к нижнему регистру
S.startswith(str) Начинается ли строка S с шаблона str
S.endswith(str) Заканчивается ли строка S шаблоном str
S.join(список) Сборка строки из списка с разделителем S
ord(символ) Символ в его код ASCII
chr(число) Код ASCII в символ
S.capitalize() Переводит первый символ строки в верхний регистр, а все остальные в нижний
S.center(width, [fill]) Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию)
S.count(str, [start],[end]) Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию)
S.expandtabs([tabsize]) Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам
S.lstrip([chars]) Удаление пробельных символов в начале строки
S.rstrip([chars]) Удаление пробельных символов в конце строки
S.strip([chars]) Удаление пробельных символов в начале и в конце строки
S.partition(шаблон) Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки
S.rpartition(sep) Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку
S.swapcase() Переводит символы нижнего регистра в верхний, а верхнего – в нижний
S.title() Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний
S.zfill(width) Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями
S.ljust(width, fillchar=» «) Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar
S.rjust(width, fillchar=» «) Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar
S.format(*args, **kwargs) Форматирование строки

Для вставки кода на Python в комментарий заключайте его в теги

Индексация и разделение строк в Python 3

Индексация и разделение строк в Python 3

Тип строки данных Python представляет собой последовательность, составленную из одного или нескольких отдельных символов, в том числе букв, чисел, пробелов или специальных символов. Поскольку строка представляет собой последовательность, к ней можно получить доступ посредством индексации и разделения, как и к другим типам данных на базе последовательностей.

В этом учебном модуле вы узнаете, как получать доступ к строкам через индексацию, как разделять их через последовательности символов и как использовать методы подсчета и определения расположения символов.

Индексация строк

Как и тип данных списка, который содержит элементы, соответствующие индексу, строки также содержат символы, которым соответствуют индексы, начиная с 0.

Для строки Sammy Shark! индекс выглядит следующим образом:

S a m m y S h a r k !
0 1 2 3 4 5 6 7 8 9 10 11

Как видите, первая S начинается с индекса 0, а заканчивается строка символом ! с индексом 11.

Также отметим, что символу пробела между Sammy и Shark также соответствует собственный индекс. В данном случае пробелу соответствует индекс 5.

Восклицательному знаку ( ! ) также соответствует индекс. Все другие специальные символы и знаки препинания, в том числе *#$&. ;? , также являются символами и будут иметь свои индексы.

Поскольку каждый символ в строке Python имеет свой индекс, мы можем получать доступ к строкам и совершать с ними манипуляции так же, как и с другими типами последовательных данных.

Доступ к символам через положительный числовой индекс

Используя ссылки на числовые индексы, мы можем изолировать один из символов в строке. Для этого мы поместим индекс в квадратные скобки. Давайте декларируем строку, выведем ее и вызовем индекс в квадратных скобках:

ss = "Sammy Shark!" print(ss[4]) 
Output
y

Когда мы ссылаемся на определенный числовой индекс строки, Python возвращает символ, находящийся на соответствующей позиции. Поскольку букве y соответствует индекс 4 строки ss = "Sammy Shark!" , когда мы выводим ss[4] , мы получаем y в качестве вывода.

Числовые индексы позволяют получать доступ к определенным символам в строках.

Доступ к символам через отрицательный индекс

Если у нас имеется длинная строка, и мы хотим использовать символ ближе к концу строки, мы также можем использовать обратный отсчет от конца строки, начиная с индекса -1 .

Для той же строки Sammy Shark! отрицательная разбивка индекса выглядит следующим образом:

S a m m y S h a r k !
-12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Используя отрицательные индексы, мы можем вывести символ r , используя ссылку на его положение в индексе -3, как показано в следующей последовательности:

print(ss[-3]) 
Output
r

Использование отрицательных индексов может быть полезно для изоляции отдельных символов ближе к концу длинной строки.

Разделение строк

Также мы можем вызвать ряд символов из строки. Допустим, мы хотим вывести слово Shark . Для этого мы можем создать срез, представляющий собой последовательность символов в исходной строке. С помощью срезов мы можем вызывать несколько значений символов, создавая диапазоны символов, разделенные двоеточием [x:y] :

print(ss[6:11]) 
Output
Shark

При построении среза, такого как [6:11] , первый индекс соответствует началу среза (включительно), а второй — окончанию среза (не включительно). Поэтому в нашем примере конец диапазона обозначается индексом позиции сразу после конца строки.

При разделении строк на срезы мы создаем подстроки, то есть, строки внутри других строк. Вызывая ss[6:11] , мы вызываем подстроку Shark , существующую в строке Sammy Shark! .

Если мы хотим включить любой конец строки, мы можем пропустить одно из чисел в синтаксисе string[n:n] . Например, если нам нужно вывести первое слово строки ss — “Sammy”, мы можем сделать это так:

print(ss[:5]) 
Output
Sammy

Мы пропустили индекс перед двоеточием в синтаксисе среза и указали только индекс после двоеточия, обозначающий конец подстроки.

Чтобы вывести подстроку, начинающуюся в середине строки и идущую до конца строки, мы можем указать только индекс перед двоеточием:

print(ss[7:]) 
Output
hark!

Если мы укажем только индекс перед двоеточием и не укажем второй индекс, подстрока будет идти от соответствующего первому индексу символа до конца строки.

Для создания срезов также можно использовать отрицательные индексы. Как мы уже говорили раньше, отрицательные индексы строки начинаются с -1 и отсчитываются далее к началу строки. При использовании отрицательных индексов, мы начинаем с меньшего числа, потому что соответствующий ему символ идет раньше.

Давайте используем два отрицательных индекса для создания среза строки ss :

print(ss[-4:-1]) 
Output
ark

Подстрока “ark” выводится из строки “Sammy Shark!”, потому что символ “a” соответствует индексу -4, а символ “k” находится перед позицией индекса -1.

Определение шага при создании срезов строк

В дополнение к двум индексам при создании срезов можно использовать третий параметр. Третий параметр указывает шаг, означающий, на сколько символов нужно сдвинуться после извлечения первого символа из строки. В предыдущих примерах мы не использовали параметр шага, а по умолчанию Python использует значение шага 1, выводя все символы между двумя индексами.

Давайте снова посмотрим на пример выше, который выводит подстроку “Shark”:

print(ss[6:11]) 
Output
Shark

Мы можем получить те же результаты, добавив третий параметр шага со значением 1:

print(ss[6:11:1]) 
Output
Shark

Если шаг равен 1, выводятся все символы между двумя индексами среза. Если мы опустим параметр шага, Python будет по умолчанию использовать значение 1.

Если же мы увеличим значение шага, некоторые символы будут пропущены:

print(ss[0:12:2]) 
Output
SmySak

Если мы зададим шаг 2 как последний параметр в синтаксисе Python ss[0:12:2] , будет пропущен каждый второй символ. Выводимые символы обозначены красным цветом:

S a m m y S h a r k !

Обратите внимание, что символ пробела с индексом 5 также пропускается, если задан шаг 2.

Если мы используем более крупное значение шага, подстрока будет значительно короче:

print(ss[0:12:4]) 
Output
Sya

Если мы укажем шаг 4 как последний параметр синтаксиса Python ss[0:12:4] , будет выведен только каждый четвертый символ. Выводимые символы также обозначены красным цветом:

S amm y Sh a rk!

В этом примере символ пробела тоже пропускается.

Поскольку мы выводим всю строку, мы можем опустить два индекса и оставить два двоеточия в синтаксисе, чтобы получить тот же результат:

print(ss[::4]) 
Output
Sya

Если мы пропустим два индекса и оставим запятые, мы включим в диапазон всю строку, а последний параметр будет определять шаг, то есть, количество пропускаемых символов.

Также мы можем указать отрицательное значение шага и использовать его для вывода исходной строки в обратном порядке, если зададим шаг -1:

print(ss[::-1]) 
Output
!krahS ymmaS

Два двоеточия без параметров означают вывод всех символов первоначальной строки, шаг 1 означает вывод всех символов без пропуска, а отрицательное значение шага изменяет порядок вывода символов на противоположный.

Давайте повторим эту команду, но используем шаг -2:

print(ss[::-2]) 
Output
!rh ma

В этом примере, ss[::-2] , мы включаем в диапазон всю первоначальную строку, поскольку индексы не указаны, и задаем обратный порядок вывода отрицательным значением шага. Кроме того, с шагом -2 мы пропускаем каждую вторую букву строки, выводимой в обратном порядке:

! k r a h S [пробел] y m m a S

В этом примере выводится символ пробела.

Задавая третий параметр синтаксиса среза Python, мы указываем шаг подстроки, которую извлекаем из первоначальной строки.

Методы подсчета

Когда мы говорим об индексах символов в строках, стоит упомянуть о некоторых методах подсчета строк или вывода индексов. Это может быть полезно для того, чтобы ограничить количество символов, которые мы хотим включить в форму ввода, или чтобы сравнивать строки. Для подсчета строк, как и других символов последовательных данных, можно использовать несколько методов.

Вначале мы рассмотрим метод len() , который поможет определить длину любого типа данных упорядоченной или неупорядоченной последовательности, включая строки, списки, кортежи и словари.

Давайте выведем длину строки ss :

print(len(ss)) 
Output
12

Длина строки “Sammy Shark!” составляет 12 символов, включая символ пробела и символ восклицательного знака.

Вместо использования переменной мы также можем передать строку прямо в метод len() :

print(len("Let's print the length of this string.")) 
Output
38

Метод len() подсчитывает общее количество символов в строке.

Если нам нужно подсчитать, сколько раз в строке встречается определенный символ или последовательность символов, мы можем использовать метод str.count() . Давайте возьмем нашу строку ss = "Sammy Shark!" и подсчитаем, сколько раз в ней встречается символ “a”:

print(ss.count("a")) 
Output
2

Мы можем поискать и другой символ:

print(ss.count("s")) 
Output
0

Хотя в строке есть буква “S”, важно понимать, что при подсчете учитывается регистр. Если мы хотим найти все буквы в строке независимо от регистра, мы можем использовать метод str.lower() , чтобы предварительно конвертировать все символы строки в нижний регистр. Вы можете узнать больше об этом методе в учебном модуле Введение в методы строк в Python 3.

Давайте попробуем использовать str.count() с последовательностью символов:

likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile." print(likes.count("likes")) 
Output
3

В строке likes последовательность символов, эквивалентная “likes”, встречается в исходной строке 3 раза.

Также мы можем определить позицию символа или последовательности символов в строке. Для этого мы можем использовать метод str.find() , который выводит позицию символа на базе номера индекса.

Мы можем посмотреть, где появляется первый символ “m” в строке ss :

print(ss.find("m")) 
Ouput
2

Первый символ “m” появляется в строке “Sammy Shark!” на позиции с индексом 2. Мы можем проверить позиции индекса в строке ss выше.

Давайте посмотрим, где встречается первая последовательность символов “likes” в строке likes :

print(likes.find("likes")) 
Ouput
6

Первый экземпляр последовательности символов “likes” начинается с индекса 6, соответствующего позиции символа l в последовательности likes .

Что делать, если, если мы хотим увидеть, где начинается вторая последовательность “likes”? Для этого мы можем передать второй параметр в метод str.find() , который будет начинаться с конкретного индекса. Вместо того, чтобы начинать с начала строки, начнем с индекса 9:

print(likes.find("likes", 9)) 
Output
34

Во втором примере, который начинается с индекса 9, первая последовательность символов “likes” начинается с индекса 34.

Также мы можем указать в качестве третьего параметра конец диапазона. Как и в случае со срезами, мы можем использовать обратный отсчет, указав отрицательный индекс:

print(likes.find("likes", 40, -6)) 
Output
64

В последнем примере мы ищем позицию последовательности “likes” между индексами 40 и -6. Поскольку последний параметр отрицательный, отсчет выполняется с конца первоначальной строки.

Методы строки len() , str.count() и str.find() можно использовать для определения длины, количества символов или последовательностей символов и индексов символов или последовательностей символов в строках.

Заключение

Возможность вызова определенных индексов строк или конкретного среза строки дает дополнительную гибкость при работе с этим типом данных. Поскольку строки относятся к последовательному типу данных, как списки и кортежи, для доступа к ним можно использовать индексы и срезы.

Чтобы продолжить изучение строк, вы можете прочитать дополнительные материалы по форматированию строк и методам строк.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *