Основные задачи на строки в языке Python

Раздел: Основы Python -> Строки

Практические задания по строкам

Как подсчитать количество вхождений символа в строке?

Наиболее эффективное решение: использовать метод count(). Он реализован на C и работает быстро даже для длинных строк.

text = "hello world"
print(text.count('l'))

Python strip (метод strip в python)

2

Python повторить строку (повторение строки в python)

Метод возвращает число непересекающихся вхождений подстроки или символа.

Как сделать то же самое с помощью цикла?

text = "hello world"
count = 0
for ch in text:
    if ch == 'l':
        count += 1
print(count)

Tuple в str python (преобразование кортежа в строку в python)

2

Python объект в строку (преобразование объекта в строку в python)

Этот способ помогает лучше понять итерацию по строке, но менее производителен.

Как использовать collections.Counter для подсчета всех символов?

from collections import Counter
text = "hello world"
c = Counter(text)
print(c['l'])

Python convert string (преобразование строк в python)

2

Python str to bytes (преобразование строки в байты в python)

Counter удобен, когда нужна статистика по всем символам сразу. Он возвращает словарь с частотами.

Типичные ошибки: забыть, что count() чувствителен к регистру. Решение: привести строку к одному регистру перед подсчетом.

text = "Hello World"
print(text.lower().count('l'))  # 3

функция разделить python (разделение строки на список в python)

Еще одна проблема: метод count() считает только непересекающиеся вхождения. Для пересекающихся шаблонов (например, подсчет "aa" в "aaa") этот метод не подходит – тогда нужно использовать цикл или регулярные выражения.

Как проверить, является ли строка палиндромом?

Самый эффективный способ: сравнить строку с её обратной версией через срез [::-1]. Эта операция в Python оптимизирована.

def is_palindrome(s):
    return s == s[::-1]

print(is_palindrome("racecar"))  # True
print(is_palindrome("hello"))   # False

вывести первый символ строки python (вывести первый символ строки в python)

True
False

вывести символ строки python (вывод символа строки в python)

Метод работает за O(n) по времени и O(n) по памяти (создается копия).

Как проверить палиндром с учетом пробелов и регистра?

def is_palindrome_clean(s):
    cleaned = ''.join(ch.lower() for ch in s if ch.isalnum())
    return cleaned == cleaned[::-1]

print(is_palindrome_clean("A man, a plan, a canal: Panama"))  # True

вывести длину строки python (вывести длину строки в python)

True

вывести элемент строки python (вывод конкретного символа строки по индексу в python)

Здесь фильтруются только буквы и цифры, а регистр приводится к нижнему.

Как решить задачу без создания обратной строки, используя два указателя?

def is_palindrome_two_pointers(s):
    left, right = 0, len(s) - 1
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1
        right -= 1
    return True

print(is_palindrome_two_pointers("racecar"))  # True

задания на строки python (задания на строки в python)

True

замена символов python (замена символов в строке python)

Этот способ экономит память (O(1) дополнительно), но в Python разница обычно незаметна.

Типичные ошибки: не учитывать пробелы и знаки препинания. Если в задаче требуется игнорировать их, то прямое сравнение s == s[::-1] даст неверный результат. Также часто забывают про регистр: "Racecar" не будет палиндромом без приведения. Решение – предварительная очистка строки.

Как удалить все повторяющиеся символы из строки, сохранив порядок?

Наиболее эффективное решение в Python 3.7+: использовать dict.fromkeys(), который сохраняет порядок вставки и удаляет дубликаты.

def remove_duplicates(s):
    return ''.join(dict.fromkeys(s))

print(remove_duplicates("banana"))  # ban

Python первое слово в строке (извлечение первого слова из строки в python)

ban

Python последнее слово в строке (извлечение последнего слова из строки в python)

Метод работает за O(n) и не требует дополнительных импортов.

Как решить задачу с помощью OrderedDict для версий Python старше 3.7?

from collections import OrderedDict
def remove_duplicates(s):
    return ''.join(OrderedDict.fromkeys(s))

print(remove_duplicates("banana"))  # ban

индекс элемента строки python (получение индекса символа или подстроки в строке python)

ban

Python номера символов (номера (индексы) символов в строке python)

OrderedDict гарантирует порядок в любых версиях Python.

Как выполнить удаление дубликатов с помощью цикла и списка?

def remove_duplicates(s):
    seen = []
    for ch in s:
        if ch not in seen:
            seen.append(ch)
    return ''.join(seen)

print(remove_duplicates("banana"))  # ban

Python новая строка (использование символа новой строки в python)

ban

Python строки find (метод find для строк)

Этот вариант понятен, но менее эффективен (O(n^2) из-за проверки in в списке). Лучше использовать множество для проверки, но множество не сохраняет порядок.

Как сохранить только первое вхождение с помощью множества и списка?

def remove_duplicates(s):
    seen = set()
    result = []
    for ch in s:
        if ch not in seen:
            seen.add(ch)
            result.append(ch)
    return ''.join(result)

print(remove_duplicates("banana"))  # ban

Python string index (метод str.index в python)

ban

Этот подход работает за O(n) и явно показывает логику.

Типичные ошибки: попытка использовать set() напрямую (''.join(set(s))) – порядок символов не сохраняется. Еще одна ошибка: считают, что dict.fromkeys() работает только для строк – это универсально.

- метод replace python (метод replace в python)
- длина слова python (определение длины слова в python)
- символ пустой строки python (символ пустой строки в python)

Дополнительные расширенные примеры работы со строками

Как удалить все знаки препинания из строки?

Использование str.translate() с str.maketrans – самый быстрый способ для больших текстов.

Пример
import string
text = "Привет, мир! Как дела?"
translator = str.maketrans('', '', string.punctuation)
cleaned = text.translate(translator)
print(cleaned)  # Привет мир Как дела
Привет мир Как дела

Метод maketrans создает таблицу перевода, где третьему аргументу передаются символы, которые нужно удалить. Для русского текста string.punctuation содержит только английские знаки, поэтому лучше создать свою строку с русскими пунктуационными символами.

Как отформатировать строку, используя значения из словаря?

Метод str.format_map() позволяет подставлять значения динамически, не распаковывая словарь.

Пример
data = {"name": "Анна", "age": 25}
template = "Меня зовут {name}, мне {age} лет."
print(template.format_map(data))
Меня зовут Анна, мне 25 лет.

Это безопаснее, чем %-форматирование, и удобнее, чем f-строки, когда шаблон хранится отдельно.

Как разбить строку по нескольким разделителям?

Стандартный split() принимает только один разделитель. Для нескольких используйте модуль re.

Пример
import re
text = "яблоко;груша,вишня.апельсин:банан"
words = re.split(r'[;,\.:]', text)
print(words)  # ['яблоко', 'груша', 'вишня', 'апельсин', 'банан']
['яблоко', 'груша', 'вишня', 'апельсин', 'банан']

Регулярное выражение [;,\.:] задает множество разделителей. Обратите внимание на экранирование точки.

Как найти все позиции вхождения подстроки?

Метод find() находит только первое вхождение. Для всех позиций используйте цикл или генератор.

Пример
def find_all(text, sub):
    start = 0
    positions = []
    while True:
        pos = text.find(sub, start)
        if pos == -1:
            break
        positions.append(pos)
        start = pos + 1
    return positions

print(find_all("abcabcabc", "abc"))  # [0, 3, 6]
[0, 3, 6]

Альтернатива – использование регулярных выражений с re.finditer() для получения объектов совпадений.

Как преобразовать строку в список символов и обратно?

Простейший способ – list(s) и ''.join(list). Но если нужны дополнительные манипуляции, можно использовать списковые включения.

Пример
s = "hello"
chars = [c.upper() for c in s]
print(chars)  # ['H', 'E', 'L', 'L', 'O']
new_s = ''.join(chars)
print(new_s)  # HELLO
['H', 'E', 'L', 'L', 'O']
HELLO

Обратите внимание, что join работает только со списком строк – попытка объединить список чисел вызовет ошибку.

Как сравнить две строки без учета регистра и пробелов?

Используйте нормализацию через casefold() и удаление пробелов.

Пример
s1 = "Hello World"
s2 = "hello world"
if s1.casefold() == s2.casefold():
    print("Строки равны")
Строки равны

casefold() более агрессивный, чем lower(), и правильно обрабатывает символы вроде немецкого 'ß'.

Как заменить несколько разных подстрок одновременно?

Метод replace() заменяет только одну подстроку. Для множественных замен используйте re.sub() или итеративный подход.

Пример
import re
text = "кошка и собака"
replacements = {"кошка": "кот", "собака": "пёс"}
pattern = re.compile('|'.join(map(re.escape, replacements.keys())))
result = pattern.sub(lambda m: replacements[m.group(0)], text)
print(result)  # кот и пёс
кот и пёс

Этот метод эффективен, когда количество замен велико. Можно также использовать цикл с последовательными вызовами replace(), но для большого словаря это медленнее.

Задания на строки в Python - comments

En
задания на строки python (python)