Как вывести индекс элемента строки в питоне

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

Строки – это тип данных Python, который представляет собой последовательность из одного или нескольких символов (букв, цифр, пробелов и других символов). Поскольку строки являются последовательностями, с ними можно взаимодействовать так же, как и с другими типами данных на основе последовательности – путём индексации и среза.

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

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

Каждому символу в строке соответствует индексный номер, начиная с 0. К примеру, строка 8host Blog! индексируется следующим образом:

8 h o s t B l o g !
0 1 2 3 4 5 6 7 8 9 10

Как видите, индексом первого символа является 0, последний индекс, 10, принадлежит символу «!».Любой другой символ или знак препинания (*#$&.;?,) также будет иметь свой собственный номер индекса.

Следует обратить внимание на то, что пробел также является частью строки, потому тоже имеет свой индекс (в данном случае 5).

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

Поиск символа по положительному индексу

Ссылаясь на индекс, вы можете извлечь один символ из строки. Для этого индекс помещается в квадратные скобки. Объявите строку и попробуйте извлечь один из её символов.

Читайте также:  Html div floating on top

ss = «8host Blog!»
print(ss[4])
t

Когда вы ссылаетесь на конкретный индекс, Python возвращает символ, которому этот индекс принадлежит. Символ t в строке 8host Blog! имеет индекс 4.

Выбор символа по отрицательному индексу

К примеру, у вас есть очень длинная строка. Чтобы точно определить её конец, можно начать счёт в обратном порядке, начиная с конца строки и индекса -1.

К примеру, строка 8host Blog!будет иметь следующий негативный индекс:

8 h o s t B l o g !
-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Запросите символ с отрицательным индексом -9:

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

Срез строк

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

Как можно понять из примера, 6 – индекс первого символа среза (включительно), а 10 – индекс символа после среза (по сути, в срез входят символы с индексами 6, 7, 8 и 9; восклицательный знак с индексом 10 уже не входит в срез).

Выполняя нарезку строки, вы создаёте новую строку, точнее, подстроку – строку, которая существует внутри другой строки (к примеру, строка Blog существует внутри строки 8host Blog!).

Чтобы включить в срез начало или конец строки, можно опустить индекс первого или последнего её символа. К примеру, чтобы вывести только 8host (первое слово строки), можно ввести:

Как видите, индекс первого символа не указан.

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

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

Попробуйте запросить срез с помощью отрицательного индекса:

Срезы с шагом

В предыдущем разделе срез был взят по такому шаблону:

включая индекс start и не включая индекс stop. Однако срезы можно задавать по трём параметрам:

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

Шаг со стандартным значением 1 можно не указывать – это не повлияет на поведение Python. Например:

print(ss[6:10])
Blog
print(ss[6:10:1])
Blog

Стандартный шаг будет выводить каждый индекс. Попробуйте задать нестандартное значение шага:

Если шаг – 2, Python пропустить каждый второй символ и выведет символы исходной строки через один (выведенные символы выделены красным):

Обратите внимание: пробел с индексом 5 также был пропущен, поскольку он является отдельным символом в последовательности.

Такой шаг выведет каждый четвертый символ после первого символа строки.

Запрашивая всю строку, вы можете не указывать первые два параметра (start и stop), так как при этом Python по умолчанию выводит строку от начала до конца.

Также вы можете использовать отрицательные индексы. Шаг -1 выведет символы строки в обратном порядке:

Первые два параметра пропущены, потому Python выведет все символы строки.

Попробуйте запросить всю строку с шагом -2:

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

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

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

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

Запросите длину строки ss:

Строка «8host Blog!» содержит 11 символов.

Кроме переменных, метод len() может подсчитать длину любой заданной строки, например:

print(len(«Let’s print the length of this string.»))
38

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

Метод str.count()может подсчитать, сколько раз в строке повторяется тот или иной символ. Запросите количество символов о в строке «8host Blog!».

Несмотря на то, что символ b присутствует в запрашиваемой строке, метод возвращает 0, поскольку он чувствителен к регистру. Чтобы вывести символы по нижнему регистру, используйте метод str.lower().

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

likes = «Mary likes to swim in the ocean, and likes to smile.»
print(likes.count(«likes»))
2

Подстрока likes встречается в вышеприведённой строке дважды.

Чтобы определить индекс символа в строке, используйте метод str.find().

Для примера запросите индекс символа o в строке ss:

Первый символ о в строке «8host Blog!» находится под индексом 2.

Попробуйте узнать индекс первого символа подстроки «likes» внутри строки likes:

Но в данной строке последовательность likes встречается дважды. Как узнать индекс первого символа второй последовательности likes? Методу str.find() можно задать второй параметр – индекс, с которого нужно начинать поиск.

Заключение

Теперь вы обладаете базовыми навыками работы со строками, умеете индексировать их и создавать срезы.

Источник

Найти индекс символа в строке Python

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

1. Использование find() функция

Стандартным решением для поиска позиции символа в строке является использование find() функция. Возвращает индекс первого вхождения в строку, где найден символ. Он возвращается -1 когда персонаж не найден.

2. Использование index() функция

В качестве альтернативы вы можете использовать index() функция, похожая на find() функционировать, но повышает ValueError когда персонаж не найден.

3. Использование enumerate() функция

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

4. Использование more_itertools.locate() функция

Наконец, вы можете использовать locate() функцию от more_itertools Модуль Python для поиска символов в строке. Он возвращает индекс каждого символа в строке, для которой возвращается указанный предикат. True .

Это все, что касается поиска индекса символа в строке в Python.

Средний рейтинг 4.97 /5. Подсчет голосов: 31

Голосов пока нет! Будьте первым, кто оценит этот пост.

Сожалеем, что этот пост не оказался для вас полезным!

Расскажите, как мы можем улучшить этот пост?

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂

Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно

Источник

Строковая функция str.index() в Python

Функция str.index() в Python возвращает наименьший индекс, в котором находится указанная подстрока. Если подстрока не найдена, возникает ошибка ValueError.

Синтаксис

Значение начального параметра по умолчанию – 0, и это необязательный аргумент.

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

Нам следует использовать функцию index(), когда мы хотим узнать позицию индекса подстроки. Для проверки наличия подстроки мы можем использовать оператор in.

Сравнение index() и find()

Функция index() вызывает ValueError, если подстрока не найдена, тогда, как функция find() возвращает – 1. Это единственное различие между этими функциями.

Примеры

Давайте посмотрим на несколько простых примеров функции index().

s = 'abcd1234dcba' print(s.index('a')) print(.index('cd')) print(s.index('1', 0, 5))

Теперь давайте посмотрим на другой пример, где подстрока отсутствует и выбрасывается ValueError. Я буду использовать блок try-except, чтобы перехватить исключение и распечатать его сообщение.

s = 'abcd1234dcba' try: print(s.index('1', 0, 2)) except ValueError as ve: print(ve)

Вывод: подстрока не найдена.

rindex()

Метод строки rindex() в Python аналогичен index(), за исключением того, что поиск выполняется справа налево.

s = 'abcd1234dcba' print(s.rindex('a')) print(s.rindex('cd')) print(s.rindex('1', 0, 5)) try: print(s.rindex('1', 0, 2)) except ValueError as ve: print(f'Error Message = ')
11 2 4 Error Message = substring not found

Как найти все индексы для подстроки?

Метод index() возвращает первый совпавший индекс. Мы можем определить пользовательскую функцию для поиска всех индексов, по которым находится подстрока.

def find_all_indexes(input_str, search_str): l1 = [] length = len(input_str) position = 0 while position < length: try: i = input_str.index(search_str, position) l1.append(i) position = i + 1 except ValueError as ve1: # finally exception will be raised because all the indexes are found return l1 s = 'abaacdaa12aa2' print(find_all_indexes(s, 'a')) print(find_all_indexes(s, 'aa'))

Источник

Python | Как найти индекс символа в строке?

Короткий ответ - циклом. Что вы сами пробовали делать и что у вас не получилось? И определитесь, вам символ в строке нужно найти (как в заголовке) или подстроку в строке (как в самом вопросе)?

индекс символа простым циклом находится, но чтобы найти индекс подстроки существуют интересные алгоритмы, которые могут улучшить O(n*k) сложность для типичного ввода.

2 ответа 2

Используйте index string.index(s, sub[, start[, end]]) - оффициальная документация

 >>> myString = 'aaaaSbbb' >>> myString.index('S') 4 

Учтите, что нумерация будет идти с нуля

text='bla-bla-this-bla' subtext='a' result = [] flag = False n = 1 for i,element in enumerate(text): if flag: if n > len(subtext)-1: flag = False n = 1 elif element == subtext[n]: n += 1 elif element != subtext[n]: result = result[:-1] n = 1 flag = False if element == subtext[0] and not flag: flag = True result.append(i) for item in result: print('Вхождение с ' + str(item) + ' символа') 

Нет, убрать нельзя, т.к. если Вы проанализируете алгоритм внимательнее, то заметите, что сравнивается только первый символ, а далее уже вся подстрока. При больших объёмах это будет серьёзная экономия времени и нагрузки на CPU.

*"Сложность алгоритма это не улучшает"*—если вы уберёте if element = subtext[0] , то сложность по прежнему будет O(n*m) . Если вы думаете, что на практике if element делает код быстрее, то это вероятно, но в этом случае следует указывать benchmark, который вы использовали для сравнения (конкретную реализацию (например, на pypy, я бы попробовал: for j, c in enumerate(subtext): if text[i + j] != c: break # unequal .. ), ожидаемый ввод (размер, частоты символов) итд).

Источник

Оцените статью