Обработка символьных данных
Основы работы со строками
Символьные строки — это последовательности символов, которые широко используются в программировании для хранения и обработки текстовой информации. В Python строки являются неизменяемыми объектами, но поддерживают множество операций для работы с ними.
Встроенные функции для работы со строками
1 Основные операции
len(s)— длина строкиs[i]— доступ к символу по индексуs + t— конкатенация строкs * n— повторение строкиs in t— проверка вхождения подстроки
2 Методы строк
s.lower(),s.upper()— регистрs.strip()— удаление пробеловs.split()— разделение на списокs.find(),s.rfind()— поискs.replace()— замена подстроки
3 Проверки
s.isdigit()— только цифрыs.isalpha()— только буквыs.isalnum()— буквы и цифрыs.startswith()— начинается сs.endswith()— заканчивается на
Алгоритмы обработки символьных строк
Подсчёт количества символов
Подсчет количества вхождений символа в строку:
def count_char(s, char):
count = 0
for c in s:
if c == char:
count += 1
return count
# Или с использованием встроенных методов
def count_char_builtin(s, char):
return s.count(char)
Подсчет символа ‘l’ в строке «Hello»: результат = 2
Разбиение строки на слова
Разделение строки на слова по пробельным символам:
def split_words(s):
words = []
current_word = ""
for char in s:
if char.isspace():
if current_word:
words.append(current_word)
current_word = ""
else:
current_word += char
if current_word:
words.append(current_word)
return words
# Или с использованием встроенных методов
def split_words_builtin(s):
return s.split()
Разбиение «Hello world Python» на слова
Поиск подстроки
Поиск позиции подстроки в строке:
def find_substring(s, substring):
n = len(s)
m = len(substring)
for i in range(n - m + 1):
if s[i:i+m] == substring:
return i
return -1
# Или с использованием встроенных методов
def find_substring_builtin(s, substring):
return s.find(substring)
Поиск «tho» в «Python»: позиция = 2
Замена подстроки
Замена всех вхождений подстроки на другую строку:
def replace_substring(s, old, new):
result = ""
i = 0
n = len(s)
m = len(old)
while i < n:
if i <= n - m and s[i:i+m] == old:
result += new
i += m
else:
result += s[i]
i += 1
return result
# Или с использованием встроенных методов
def replace_substring_builtin(s, old, new):
return s.replace(old, new)
Замена "like Java" на "love Python"
Генерация слов по заданным ограничениям
Генерация всех слов заданной длины в алфавите {a, b, c}, содержащих не более двух букв 'a':
def generate_words(length, alphabet, max_a, current="", result=None):
if result is None:
result = []
if len(current) == length:
if current.count('a') <= max_a:
result.append(current)
return result
for char in alphabet:
generate_words(length, alphabet, max_a, current + char, result)
return result
# Пример использования
alphabet = ['a', 'b', 'c']
words = generate_words(3, alphabet, 2)
print(words) # ['bbb', 'bbc', 'bcb', 'bcc', 'cbb', 'cbc', 'ccb', 'ccc', 'abb', 'abc', ...]
Некоторые слова длиной 3 из алфавита {a, b, c}
Преобразование чисел и строк
Число → Строка
def number_to_string(n):
if n == 0:
return "0"
is_negative = n < 0
if is_negative:
n = -n
result = ""
while n > 0:
digit = n % 10
result = chr(ord('0') + digit) + result
n //= 10
return "-" + result if is_negative else result
# Или с использованием встроенных функций
def number_to_string_builtin(n):
return str(n)
Число 123 → Строка "123"
Строка → Число
def string_to_number(s):
if not s:
return 0
is_negative = False
if s[0] == '-':
is_negative = True
s = s[1:]
result = 0
for char in s:
if '0' <= char <= '9':
result = result * 10 + (ord(char) - ord('0'))
else:
break # нечисловой символ
return -result if is_negative else result
# Или с использованием встроенных функций
def string_to_number_builtin(s):
return int(s)
Строка "456" → Число 456
Важные моменты для запоминания
| Операция | Встроенная функция | Сложность |
|---|---|---|
| Длина строки | len(s) |
O(1) |
| Поиск подстроки | s.find() |
O(n*m) |
| Замена подстроки | s.replace() |
O(n) |
| Разделение на слова | s.split() |
O(n) |
| Преобразование число→строка | str(n) |
O(log n) |
| Преобразование строка→число | int(s) |
O(n) |
Заключение
Обработка символьных данных — важная тема в программировании и в ЕГЭ по информатике. Понимание основных алгоритмов работы со строками, а также знание встроенных функций языка программирования позволяют эффективно решать широкий круг задач.
При решении задач важно выбирать подходящий метод: использовать встроенные функции для простоты или реализовывать собственные алгоритмы для лучшего понимания процесса.