Рубрики
Без рубрики

Самый питонический способ проверить, содержит ли строка Python в другой строке? (Учебное пособие + видео)

https://youtu.be/eeguwq6uhgc Как проверить, если Python String S1 содержит другую строку S2? Существует два простых способа проверить, содержит ли строки S1 String S2: используйте выражение S2 в S1, ORUSE, ORUSE метод находки S1.Find (S2). Вы можете попробовать оба метода в нашей интерактивной оболочке Python (просто нажмите «Запустить», чтобы выполнить код в … Самый питонический способ проверить, содержит ли строка Python другой строки? (Учебное пособие + видео) Подробнее »

Автор оригинала: Chris.

Как проверить, является ли строка Python S1. содержит другую строку S2. ? Есть два простых способа проверить ли строки S1. содержит нить S2. :

  1. Используйте выражение S2 в S1. , или
  2. Используйте метод поиска S1.Find (S2) .

Вы можете попробовать оба метода в нашей интерактивной Python Shell (просто нажмите «Запустить», чтобы выполнить код в вашем браузере):

Головоломка : Можете ли вы модифицировать «Метод 2», чтобы он также возвращает логические значения?

Третий более мощный метод – использовать регулярные выражения Python. В дополнение к этому, четвертый метод будет использовать эффективный алгоритм поиска строки, такой как Rabin-Karb.

Тем не менее, это только в том случае, если вы хотите улучшить свои навыки понимания кода, а не быстро решить проблему сдерживания строки для вашего собственного проекта. 😉.

Используйте ключевое слово Python «в»

Этот метод может прийти к вам наиболее естественным.

s1 = "Ronaldo is better than Messi"

print("Ronaldo" in s1)
# True

print("Football" in s1)
# False

Вы можете использовать в Ключевое слово для проверки сдерживания для любого Python ИТЕРИТЕЛЬНО также. Он работает аналогичным образом для списков, наборов и словарей.

Используйте метод находки строки Python Find ()

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

s1 = "Ronaldo is better than Messi"

print(s1.find("Ronaldo"))
# 0

print(s1.find("Football"))
# -1

print(s1.find("Messi"))
# 23

Если подстрока не существует, Найти () Метод возвращает индекс -1 Отказ Вы должны быть осторожны, чтобы правильно обрабатывать это значение возврата.

Вы также можете указать индексы запуска и остановки, чтобы ограничить поиск определенного (индекса) диапазона:

s1 = "Ronaldo is better than Messi"

print(s1.find("Ronaldo", 5))
# -1

print(s1.find("Football"))
# -1

print(s1.find("Messi", 5, 100))
# 23

Подводя итоги, вы можете использовать встроенные функции Python S2 в S1 и S1.Find (S2) Чтобы проверить ли строки S1 Содержит строку S2 Отказ

Самый мощный способ с регулярными выражениями

Регулярные выражения являются мощным способом поиска шаблонов в строках. Это именно то, что мы хотим сделать здесь. Наш шаблон так же просто, как может получить: простая строка.

Вот пример:

import re

s1 = "Ronaldo is better than Messi. Ronaldo really is better."

print(re.findall("Ronaldo", s1))
# ['Ronaldo', 'Ronaldo']

print(re.findall("Football", s1))
# []

print(re.findall("Messi", s1))
# ['Messi']

Мы используем мощный Python Библиотека регулярных выражений Re Отказ Как вы можете видеть, findall () Метод находит Все вхождения строки (не только один). Если вы заинтересованы в конкретных показателях, вы можете использовать Regex Поиск () Метод, который возвращает объект совпадения с индексами запуска и остановки нашской строки:

import re

s1 = "Ronaldo is better than Messi. Ronaldo really is better."

print(re.search("Ronaldo", s1))
# 

Как видите, он возвращает только первый матч «Роналду» подстрока.

Связанная статья: Python Regex SuperPower – Ultimate Guide

Более продвинутые алгоритмы

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

Naive String Search Algorithm просто итерации по всем показателям строки S1 Отказ Затем он пытается сопоставить все символы строки S2 Отказ Если это не удается, он продолжается с следующим индексом. Однако этот алгоритм имеет O (Лен (S1) * Len (S2)) Сложность худшего случая.

Алгоритм Рабин-Карб более эффективен. Улучшение происходит от использования нарезки для доступа к подстроке, начиная с индексами Я и сравнение значений хеша вместо самих подстроков. Это более эффективно, потому что расчетное значение хеша намного быстрее, чем проверка равенства двух строк. Однако две разные строки могут привести к тому же хеш-значению. Следовательно, алгоритм Rabin-Karb должен обязательно исключить этот случай. Вот …| Алгоритм Rabin-Karb в Python Я создал на основе псевдокода, приведенного в статье:

def RabinKarp(string, pattern):
    n, m = len(string), len(pattern)
    hpattern = hash(pattern);
    for i in range(n-m+1):
        hs = hash(string[i:i+m])
        if hs == hpattern:
            if string[i:i+m] == pattern:
                return i
    return -1


s1 = "Ronaldo is better than Messi"

print(RabinKarp(s1, "Ronaldo"))
# 0

print(RabinKarp(s1, "Football"))
# -1

print(RabinKarp(s1, "Messi"))
# 23

Вы можете визуализировать выполнение алгоритма Rabinkarp в следующем интерактивном симуляторе памяти:

Нажмите «Далее», чтобы увидеть следующий шаг, развернутый в вашей виртуальной памяти! 🙂.

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

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

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

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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