Руководство по нахождению слова python в тексте и коллекциях
Поиск слова в строке или списке на Python
Как проще всего проверить, содержится ли слово "python" в строке или элементе списка?
Самым эффективным и наглядным способом является использование оператора in. Он возвращает True, если подстрока (или элемент) найдена, и False в противном случае.
text = "\u042f изучаю Python и Python очень удобен"
word = "Python"
result = word in text
print(result) # TruePython strip (метод strip в python)
Для списка элементов:
languages = ["Java", "Python", "C++"]
target = "Python"
found = target in languages
print(found) # TruePython повторить строку (повторение строки в python)
\u0422ипичная ошибка:
Оператор in чувствителен к регистру. Если искать "python" (маленькими буквами) в строке "Python", результат будет False. Решение: предварительно привести обе строки к одному регистру через .lower().
text = "\u042f изучаю Python"
word = "python"
result = word.lower() in text.lower()
print(result) # True
Tuple в str python (преобразование кортежа в строку в python)
Как получить индекс первого вхождения подстроки?
Метод str.find() возвращает индекс начала первого вхождения подстроки или -1, если подстрока не найдена.
text = "Python - язык программирования Python"
idx = text.find("Python")
print(idx) # 0Python объект в строку (преобразование объекта в строку в python)
Альтернатива str.index() работает аналогично, но при отсутствии подстроки вызывает исключение ValueError.
Распространённая проблема:
Использование str.index() без обработки исключения может привести к аварийному завершению программы. Рекомендуется использовать str.find() или оборачивать вызов в try-except.
text = "Привет мир"
try:
idx = text.index("Python")
except ValueError:
print("Слово не найдено")Python convert string (преобразование строк в python)
Как найти слово как отдельную лексическую единицу, а не часть другого слова?
Для поиска точного слова с учётом границ (пробелы, знаки препинания) используется модуль re с шаблоном \bслово\b.
import re
text = "Python - это python, а не pythonic"
pattern = r'\bpython\b'
match = re.search(pattern, text, re.IGNORECASE)
if match:
print(f"Найдено на позиции {match.start()}") # Найдено на позиции 12Python str to bytes (преобразование строки в байты в python)
Флаг re.IGNORECASE делает поиск нечувствительным к регистру.
Ошибка:
Если не использовать флаг re.IGNORECASE, регистр будет учитываться. Также важно экранировать специальные символы в искомом слове (если они есть) с помощью re.escape().
Как подсчитать количество вхождений слова в строку?
Метод str.count() возвращает число непересекающихся вхождений подстроки.
text = "python python PYTHON python"
count = text.lower().count("python")
print(count) # 4функция разделить python (разделение строки на список в python)
Для подсчёта точных слов с границами используется re.findall().
import re
text = "python pythonic python"
words = re.findall(r'\bpython\b', text, re.IGNORECASE)
print(len(words)) # 2 (pythonic не входит)вывести первый символ строки python (вывести первый символ строки в python)
Как проверить наличие элемента в списке с дополнительным условием (например, частичное совпадение)?
Используется функция any() с генератором, проверяющим каждую строку на вхождение подстроки.
words_list = ["javascript", "python", "java"]
search = "python"
found = any(search in word for word in words_list)
print(found) # Trueвывести символ строки python (вывод символа строки в python)
Так можно искать подстроку внутри элементов списка, а не только полное совпадение.
Как найти все позиции вхождений слова в строке?
Метод re.finditer() возвращает итератор объектов Match, из которых можно извлечь начальные индексы.
import re
text = "python java python c++"
pattern = r'\bpython\b'
positions = [m.start() for m in re.finditer(pattern, text, re.IGNORECASE)]
print(positions) # [0, 11]
Сложность:
При использовании re.finditer() не следует модифицировать строку во время итерации, иначе индексы сместятся.
Расширенные примеры поиска слова python
Пример 1. Разбиение строки на слова и поиск в множестве
text = "Python - это мощный язык. python очень популярен."
import string
cleaned = text.translate(str.maketrans('', '', string.punctuation))
words_set = set(cleaned.lower().split())
print('python' in words_set) # True
True
Этот подход быстр для многократных проверок, так как множество обеспечивает O(1).
Пример 2. Подсчёт слов с помощью collections.Counter
from collections import Counter
import re
text = "python java python c++ python java"
words = re.findall(r'\b\w+\b', text.lower())
counter = Counter(words)
print(counter['python']) # 3
3
Counter позволяет получить статистику по всем словам.
Пример 3. Поиск в списке с частичным совпадением и возвратом индекса
words = ["pythonic", "java", "pyth", "python"]
indices = [i for i, w in enumerate(words) if 'python' in w.lower()]
print(indices) # [0, 3]
[0, 3]
Такой приём удобен для фильтрации данных.
Пример 4. Использование mmap для эффективного поиска в большом файле
import mmap
with open('text.txt', 'w') as f:
f.write("Python - это круто. Pythonic? да! python")
with open('text.txt', 'r') as f:
with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm:
if mm.find(b'python') != -1:
print("Слово найдено (байтовый поиск)")
if mm.find(b'python') != -1 or mm.find(b'Python') != -1:
print("Найдено одно из двух")
Слово найдено (байтовый поиск) Найдено одно из двух
mmap работает на уровне байтов и подходит для больших файлов.
Пример 5. Использование nltk (для точного выделения слов)
# nltk необходимо установить: pip install nltk
import nltk
nltk.download('punkt')
text = "Python's syntax is clear. python, it's great!"
tokens = nltk.word_tokenize(text)
print('python' in [t.lower() for t in tokens]) # True
True
nltk корректно обрабатывает апострофы и пунктуацию.