Программы Python для строковых операций
Опубликовано: 2022-04-26В этом руководстве вы будете писать программы на Python для решения часто задаваемых вопросов об операциях со строками .
Вы узнаете, как проверить, являются ли строки Python палиндромами , анаграммами и находятся ли они в заглавном регистре .
Строки Python: краткий обзор
В Python строки — это мощные встроенные типы данных. Они могут хранить последовательность символов.
Индексация в строках Python: как и все итерации Python, строки также имеют нулевой индекс. Таким образом, допустимые индексы для строки длины N — от 0, 1, 2 до N — 1.
Python также поддерживает отрицательное индексирование для доступа к элементам с конца строки. Таким образом, -1 — это индекс последнего символа в строке, -2 — это индекс предпоследнего символа в строке и так далее.
Неизменяемость строк Python . Кроме того, строки в Python неизменяемы, поэтому вы не можете изменить их на месте. Однако вы можете вызывать на них несколько строковых методов и получать копии строк с желаемым результатом.
Теперь, когда мы рассмотрели основы работы со строками в Python, давайте приступим к решению некоторых простых, но интересных задач.
Давайте начнем.
Проверьте, является ли строка Python палиндромом
Проблема : Учитывая строку Python, проверьте, является ли она палиндромом.
Если да, вернуть True; в противном случае вернуть False.
Итак, наша первая задача — проверить, является ли заданная строка палиндромом.
Палиндром — это строка, которая одинаково читается как слева направо, так и справа налево. Давайте перечислим несколько примеров: гоночная машина, реферал, уровень, мадам, радар и так далее.
Вот шаги для решения этой проблемы:
- Получите обратную копию строки и при необходимости сохраните ее в другой переменной.
- Сравните значения исходной строки и перевернутой строки.
- Если они равны, строка является палиндромом. Так что верните True и остановитесь.
- Если исходная и перевернутая копии не равны, строка не является палиндромом. Поэтому мы должны вернуть False .
Ключевой операцией является получение обратной копии строки. В Python есть несколько способов сделать это.
Тем не менее, мы рассмотрим два подхода:
- Использование нарезки строк
- Использование функции reversed() и метода join()
Как перевернуть строку Python с помощью нарезки
Синтаксис <any_str>[start: stop: step]
возвращает фрагмент строки <any_str>
от start
до, но не включая stop
, с размером step
.
- Если вы опустите
start
, срез начнется с начала строки. - Если вы не укажете индекс
stop
, срез будет продолжаться до конца строки. - А отрицательные значения
step
можно использовать для возврата срезов, начиная с конца строки.
Итак <any_str>[::-1]
возвращает обратную копию строки.
Следующая ячейка кода содержит определение функции is_palindrome()
.
Он принимает строку в качестве аргумента и возвращает True
или False
в зависимости от того, палиндром это или нет.
Здесь мы использовали нарезку строки для получения обратной копии строки.
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
️ Теперь, когда мы определили функцию, мы можем продолжить и вызвать любую допустимую строку в качестве аргумента.
is_palindrome("racecar") True
В приведенной выше ячейке кода racecar
является палиндромом. Таким образом, функция is_palindrome()
возвращает True
, как и ожидалось.
Теперь попробуйте вызвать функцию с любой строкой, не являющейся палиндромом, например, с river
.
is_palindrome("river") False
И, как видите, он возвращает False
, что правильно.
Как перевернуть строку Python, используя reverse() и join()
В Python вы можете использовать метод join()
вместе с функцией reversed()
, чтобы перевернуть строку.
- Функция
reversed()
возвращает обратный итератор по символам в строке. - Затем можно использовать метод
join()
для соединения этих символов в обратном порядке.
Используя описанный выше метод, вы можете переписать is_palindrome()
, как показано в приведенной ниже ячейке кода.
def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False
Вы также можете использовать is_palindrome()
внутри списка, чтобы собрать все палиндромы из более длинного списка строк.
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
Вот как работает приведенный выше код:
- Пройдите через
str_list
, вызовитеis_palindrome()
для каждой строки. - Если
is_palindrome()
возвращаетTrue
, добавьте строку в списокpalindromes
.
Как видно из приведенного выше вывода, palindromes
— это список всех строк-палиндромов в str_list
.
Проверьте, являются ли две строки Python анаграммами
Еще один популярный вопрос, с которым вы можете столкнуться в интервью, — проверить, являются ли пары строк str1
и str2
анаграммами.
Две строки называются анаграммами , если количество символов в этих двух строках совершенно одинаково. Это означает, что вы можете получить одну из строк, переставив или переставив символы в другой строке.
Примеры анаграмм включают состояние-вкус, сохранение-ваза, локоть-ниже и так далее.
Как проверить наличие анаграмм с помощью объекта счетчика в Python
Простой и интуитивно понятный способ — вычислить количество вхождений каждого символа в две строки. А затем проверьте, равны ли счетчики.
Еще проще это сделать с помощью объекта Counter
из модуля itertools
. Объект Counter возвращает словарь Python: с символами в качестве ключей и соответствующими счетчиками в качестве значений .
Рассмотрим строки "save"
и "vase"
, как показано ниже.
str1 = "save" str2 = "vase"
Здесь c1
и c2
являются объектами-счетчиками, содержащими количество символов в строках str1
и str2
соответственно.
from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True
c1 == c2
возвращает True
, поскольку str1
и str2
являются анаграммами.
Используя эту логику, теперь мы можем продолжить и определить функцию are_anagrams()
с двумя параметрами word1
и word2
. В теле функции мы проверяем, является ли Counter(word1) == Counter(word2)
.
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
️ Для проверки вызовите are_anagrams()
с аргументами str1
, str2
. Поскольку str1
и str2
являются анаграммами («save» и «vase»), функция возвращает True
, что правильно.
are_anagrams(str1, str2) True
Как проверить наличие анаграмм с помощью отсортированных копий строк
Есть еще один способ сделать это.
Если две строки являются анаграммами, то их отсортированные копии равны.
Таким образом, мы можем переписать функцию are_anagrams()
, чтобы проверить, совпадает ли отсортированная версия str1
с отсортированной копией str2
. Если они равны, то две строки являются анаграммами; иначе их нет.
Используя описанный выше метод для проверки равенства отсортированных копий, мы можем переписать функцию are_anagrams()
следующим образом.
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
Давайте теперь сделаем несколько вызовов функций.
- Строки «локоть» и «ниже» являются анаграммами, и функция
are_anagrams()
возвращаетTrue
. - А «состояние» и «попробовал» — это не анаграммы, и функция возвращает
False
.
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
Проверьте, находится ли строка Python в заголовке
Вот наш последний вопрос для этого урока.
Проблема : дана строка: имя человека — с именем и фамилией.
Вы должны проверить, являются ли первые буквы имени и фамилии заглавными.
Этот тип регистра, в котором первая буква каждого слова заглавная, называется регистром заглавия .
Итак, вы должны проверить, находится ли имя в заголовке:
1. Если да, вывести сообщение о том, что форматирование в заглавном регистре.
2. В противном случае верните копию строки, отформатированную в заглавном регистре.
- В Python есть встроенный строковый метод
istitle()
, который проверяет, находится ли строка в заголовке.
<str>.istitle()
возвращаетTrue
, если строка<str>
отформатирована в заглавном регистре, иначе возвращаетFalse
.
- А строковый метод Python
title()
возвращает копию строки, отформатированную в заглавном регистре.
Итак, теперь вы можете использовать эти два метода для решения проблемы.
Определите функцию check_titlecase()
, которая принимает name
в качестве аргумента.
- Вы можете вызвать метод
istitle()
для входной строки, чтобы проверить, отформатирована ли она в заглавном регистре. - Если
True
, вы можете напечатать, что строка уже находится в заглавном регистре. - В противном случае вы можете вызвать метод
title()
и вернуть копию строки в заголовке.
В следующей ячейке кода показано определение функции check_titlecase()
.
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
Давайте теперь вызовем метод check_titlecase()
с аргументом.
check_titlecase("jane smith") # Output Jane Smith
В приведенном выше выводе вы можете видеть, что строка «Джейн Смит» теперь находится в заголовке.
️ Возьмем другой пример.
check_titlecase("agatha Christie") # Output Agatha Christie
На этот раз давайте вызовем функцию со строкой в заглавном регистре.
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
Мы получаем уведомление о том, что строка отформатирована в заглавном регистре, и функция работает должным образом.
Вывод
Теперь давайте подытожим проблемы, которые мы обсуждали до сих пор.
- Чтобы проверить, является ли строка палиндромом, проверьте, равны ли строка и ее перевернутая версия. Вы можете использовать нарезку строк или встроенные методы для реверсирования строк.
- Чтобы проверить, являются ли две строки анаграммами, проверьте, равны ли их отсортированные копии. А для сортировки строки используйте встроенную функцию sorted() .
- Чтобы проверить, находится ли имя в заглавном регистре, используйте метод .istitle() для проверки и метод .title() для получения копии строки с заглавным регистром.
Надеюсь, вам понравился этот урок по строкам Python. В качестве следующего шага узнайте, как использовать списки в Python, или узнайте об операторе «не равно» в Python.
Удачного обучения и кодирования!