Программы Python для строковых операций

Опубликовано: 2022-04-26

В этом руководстве вы будете писать программы на Python для решения часто задаваемых вопросов об операциях со строками .

Вы узнаете, как проверить, являются ли строки Python палиндромами , анаграммами и находятся ли они в заглавном регистре .

Строки Python: краткий обзор

В Python строки — это мощные встроенные типы данных. Они могут хранить последовательность символов.

Индексация в строках Python: как и все итерации Python, строки также имеют нулевой индекс. Таким образом, допустимые индексы для строки длины N — от 0, 1, 2 до N — 1.

python-строки

Python также поддерживает отрицательное индексирование для доступа к элементам с конца строки. Таким образом, -1 — это индекс последнего символа в строке, -2 — это индекс предпоследнего символа в строке и так далее.

Неизменяемость строк Python . Кроме того, строки в Python неизменяемы, поэтому вы не можете изменить их на месте. Однако вы можете вызывать на них несколько строковых методов и получать копии строк с желаемым результатом.

Теперь, когда мы рассмотрели основы работы со строками в Python, давайте приступим к решению некоторых простых, но интересных задач.

Давайте начнем.

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

Проблема : Учитывая строку Python, проверьте, является ли она палиндромом.

Если да, вернуть True; в противном случае вернуть False.

Итак, наша первая задача — проверить, является ли заданная строка палиндромом.

Палиндром — это строка, которая одинаково читается как слева направо, так и справа налево. Давайте перечислим несколько примеров: гоночная машина, реферал, уровень, мадам, радар и так далее.

Python-строка-палиндром

Вот шаги для решения этой проблемы:

  • Получите обратную копию строки и при необходимости сохраните ее в другой переменной.
  • Сравните значения исходной строки и перевернутой строки.
  • Если они равны, строка является палиндромом. Так что верните 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-строки-анаграммы

Как проверить наличие анаграмм с помощью объекта счетчика в 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-string-title-case
  • В 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.

Удачного обучения и кодирования!