Как проверить, является ли строка Python S1. содержит другую строку S2. ? Есть два простых способа проверить ли строки S1. содержит нить S2. :
- Используйте выражение
S2 в S1.
, или - Используйте метод поиска
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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.