Подсчитайте количество пробелов между словами в строке
Я решаю эту проблему на Hackerrank, и мне пришла в голову идея, которая включает разделение input и присоединитесь к нему позже (см. мою реализацию ниже). Однако один из тестовых примеров содержит ввод ( приветмир ), что привело к сбою моего кода, потому что строка ввода содержит более 1 пробела между словами. Итак, мне просто интересно, может ли кто-нибудь помочь мне исправить мой код, и мне просто интересно, как подсчитать, сколько пробелов (особенно нескольких пробелов) в строке в Python. Я нашел, как считать пробелы в Java, но не в Python. Для тестового случая я прикрепил рис.
Моя реализация:
7 ответов
Вы можете исправить это, разделив шаблон ‘ ‘ (пробел)
Для подсчета количества пробелов между двумя словами вы можете использовать модуль регулярных выражений python.
Изменить: После того, как вы перейдете по ссылке, чтобы прочитать фактический вопрос, в следующий раз включите соответствующие детали в свой вопрос, это облегчит все вокруг, ваша проблема по-прежнему не учитывает количество пробелов, до, между или после слов. Ответ, который решает конкретную задачу, уже был предоставлен в виде:
Смотрите ответ, предоставленный @Steven Summers
Я решил эту проблему некоторое время назад, просто добавив «» (пробел) в функцию split, а затем напечатал каждый элемент, разделенный пробелом. Это все.
Результат функции split с помощью «hello world lol»
Затем напечатайте каждый элемент + пробел.
Вы можете использовать функцию count () для подсчета повторения специального символа
Для подсчета места вы должны:
То, что я предлагаю сделать для учебного вопроса, является быстрым простым решением.
str.title() будет начинаться с заглавной буквы каждого слова в строке.
Также существуют различные другие методы, такие как:
Однако подсчет проще всего осуществить и следовать.
Теперь count вернет общее количество, если вы хотите узнать количество пробелов между мирами.
До сих пор мы обсуждали числа как стандартные типы данных в Python. В этом разделе руководства мы обсудим самый популярный тип данных, то есть строку и методы работы со строками в Python.
Что такое строка в Python?
Строка Python – это набор символов, заключенных в одинарные, двойные или тройные кавычки. Компьютер не понимает персонажей; внутри он хранит манипулируемый символ как комбинацию нулей и единиц.
Каждый символ кодируется символом ASCII или Unicode. Таким образом, мы можем сказать, что строки Python также называются набором символов Unicode.
В Python строки можно создавать, заключая символ или последовательность символов в кавычки. Python позволяет нам использовать одинарные кавычки, двойные кавычки или тройные кавычки для создания строки.
Рассмотрим следующий пример на Python для создания строки.
Проверим тип переменной str с помощью скрипта
В Python строки рассматриваются как последовательность символов, что означает, что Python не поддерживает символьный тип данных; вместо этого одиночный символ, записанный как ‘p’, рассматривается как строка длины 1.
Создание строки в Python
Мы можем создать строку, заключив символы в одинарные или двойные кавычки. Python также предоставляет тройные кавычки для представления строки, но обычно используется для многострочных строк или строк документации.
Индексирование и разбивка строк
Как и в других языках, индексирование строк Python начинается с 0. Например, строка «HELLO» индексируется, как показано на рисунке ниже.
Рассмотрим следующий пример:
Как показано в Python, оператор slice [] используется для доступа к отдельным символам строки. Однако мы можем использовать оператор:(двоеточие) в Python для доступа к подстроке из данной строки. Рассмотрим следующий пример.
Здесь мы должны заметить, что верхний диапазон, указанный в операторе среза, всегда является исключающим, т.е. если задано str = ‘HELLO’, тогда str [1: 3] всегда будет включать str [1] = ‘E’, str [2 ] = ‘L’ и ничего больше.
Рассмотрим следующий пример:
Рассмотрим следующий пример:
Переназначение строк
Обновить содержимое строк так же просто, как присвоить его новой строке. Строковый объект не поддерживает присвоение элемента, т. е. строка может быть заменена только новой строкой, поскольку ее содержимое не может быть частично заменено. Строки неизменяемы в Python.
Рассмотрим следующий пример.
Однако в примере 1 строку str можно полностью присвоить новому содержимому, это указано в следующем примере.
Удаление строки
Как мы знаем, строки неизменяемы. Мы не можем удалить символы из строки. Но мы можем удалить всю строку с помощью ключевого слова del.
Теперь мы удаляем всю строку.
Строковые операторы
Оператор
Описание
+
Он известен как оператор конкатенации, используемый для соединения строк по обе стороны от оператора.
*
Известен как оператор повторения. Он объединяет несколько копий одной и той же строки.
[]
оператор среза. Он используется для доступа к подстрокам определенной строки.
[:]
оператор среза диапазона, используется для доступа к символам из указанного диапазона.
in
Оператор членства. Он возвращается, если в указанной строке присутствует определенная подстрока.
not in
Также является оператором членства и выполняет функцию, обратную in. Он возвращает истину, если в указанной строке отсутствует конкретная подстрока.
r / R
Используется для указания необработанной строки. Необработанные строки применяются в тех случаях, когда нам нужно вывести фактическое значение escape-символов, таких как «C: // python». Чтобы определить любую строку как необработанную, за символом r или R следует строка.
%
Необходим для форматирования строк. Применяет спецификаторы формата, используемые в программировании на C, такие как %d или %f, для сопоставления их значений в python. Мы еще обсудим, как выполняется форматирование в Python.
Рассмотрим следующий пример, чтобы понять реальное использование операторов Python.
Форматирование строки Python
Управляющая последовательность
Предположим, нам нужно написать текст – They said, “Hello what’s going on?” – данный оператор может быть записан в одинарные или двойные кавычки, но он вызовет ошибку SyntaxError, поскольку он содержит как одинарные, так и двойные кавычки.
Рассмотрим следующий пример, чтобы понять реальное использование операторов Python.
Мы можем использовать тройные кавычки для решения этой проблемы, но Python предоставляет escape-последовательность.
Символ обратной косой черты(/) обозначает escape-последовательность. За обратной косой чертой может следовать специальный символ, который интерпретируется по-разному. Одиночные кавычки внутри строки должны быть экранированы. Мы можем применить то же самое, что и в двойных кавычках.
Список escape-последовательностей приведен ниже:
Номер
Последовательность
Описание
Пример
1.
\newline
Игнорирует новую строку
Вот простой пример escape-последовательности.
Мы можем игнорировать escape-последовательность из данной строки, используя необработанную строку. Мы можем сделать это, написав r или R перед строкой. Рассмотрим следующий пример.
Метод format()
Метод format() – самый гибкий и полезный метод форматирования строк. Фигурные скобки <> используются в качестве заполнителя в строке и заменяются аргументом метода format(). Посмотрим на данный пример:
Форматирование строки Python с использованием оператора %
Python позволяет нам использовать спецификаторы формата, используемые в инструкции printf языка C. Спецификаторы формата в Python обрабатываются так же, как и в C. Однако Python предоставляет дополнительный оператор%, который используется в качестве интерфейса между спецификаторами формата и их значениями. Другими словами, мы можем сказать, что он связывает спецификаторы формата со значениями.
Рассмотрим следующий пример.
Строковые функции Python
Python предоставляет различные встроенные функции, которые используются для обработки строк.
Я начал вести список наиболее часто используемых функций, решая алгоритмические задачи на LeetCode и HackerRank.
Быть хорошим программистом — это не значит помнить все встроенные функции некоего языка. Но это не означает и того, что их запоминание — бесполезное дело. Особенно — если речь идёт о подготовке к собеседованию.
Хочу сегодня поделиться со всеми желающими моей шпаргалкой по работе со строками в Python. Я оформил её в виде списка вопросов, который использую для самопроверки. Хотя эти вопросы и не тянут на полноценные задачи, которые предлагаются на собеседованиях, их освоение поможет вам в решении реальных задач по программированию.
1. Как проверить два объекта на идентичность?
Оператор is возвращает True в том случае, если в две переменные записана ссылка на одну и ту же область памяти. Именно об этом идёт речь при разговоре об «идентичности объектов».
Обратите внимание на то, что animals и even_more_animals не идентичны, хотя и равны друг другу.
2. Как проверить то, что каждое слово в строке начинается с заглавной буквы?
3. Как проверить строку на вхождение в неё другой строки?
4. Как найти индекс первого вхождения подстроки в строку?
5. Как подсчитать количество символов в строке?
Функция len() возвращает длину строки.
6. Как подсчитать то, сколько раз определённый символ встречается в строке?
7. Как сделать первый символ строки заглавной буквой?
8. Что такое f-строки и как ими пользоваться?
9. Как найти подстроку в заданной части строки?
Метод index() можно вызывать, передавая ему необязательные аргументы, представляющие индекс начального и конечного фрагмента строки, в пределах которых и нужно осуществлять поиск подстроки.
10. Как вставить содержимое переменной в строку, воспользовавшись методом format()?
11. Как узнать о том, что в строке содержатся только цифры?
Используя этот метод, учитывайте то, что знаки препинания он цифрами не считает.
12. Как разделить строку по заданному символу?
13. Как проверить строку на то, что она составлена только из строчных букв?
Метод islower() возвращает True только в том случае, если строка составлена исключительно из строчных букв.
14. Как проверить то, что строка начинается со строчной буквы?
Сделать это можно, вызвав вышеописанный метод islower() для первого символа строки.
15. Можно ли в Python прибавить целое число к строке?
16. Как «перевернуть» строку?
Для того чтобы «перевернуть» строку, её можно разбить, представив в виде списка символов, «перевернуть» список, и, объединив его элементы, сформировать новую строку.
17. Как объединить список строк в одну строку, элементы которой разделены дефисами?
Метод join() умеет объединять элементы списков в строки, разделяя отдельные строки с использованием заданного символа.
18. Как узнать о том, что все символы строки входят в ASCII?
Метод isascii() возвращает True в том случае, если все символы, имеющиеся в строке, входят в ASCII.
19. Как привести всю строку к верхнему или нижнему регистру?
20. Как преобразовать первый и последний символы строки к верхнему регистру?
Тут, как и в одном из предыдущих примеров, мы будем обращаться к символам строки по индексам. Строки в Python иммутабельны, поэтому мы будем заниматься сборкой новой строки на основе существующей.
21. Как проверить строку на то, что она составлена только из прописных букв?
22. В какой ситуации вы воспользовались бы методом splitlines()?
Метод splitlines() разделяет строки по символам разрыва строки.
23. Как получить срез строки?
Для получения среза строки используется синтаксическая конструкция следующего вида:
24. Как преобразовать целое число в строку?
25. Как узнать о том, что строка содержит только алфавитные символы?
Метод isalpha() возвращает True в том случае, если все символы в строке являются буквами.
26. Как в заданной строке заменить на что-либо все вхождения некоей подстроки?
27. Как вернуть символ строки с минимальным ASCII-кодом?
Если взглянуть на ASCII-коды элементов, то окажется, например, что прописные буквы имеют меньшие коды, чем строчные. Функция min() возвращает символ строки, имеющий наименьший код.
28. Как проверить строку на то, что в ней содержатся только алфавитно-цифровые символы?
29. Как удалить пробелы из начала строки (из её левой части), из её конца (из правой части), или с обеих сторон строки?
30. Как проверить то, что строка начинается с заданной последовательности символов, или заканчивается заданной последовательностью символов?
31. Как закодировать строку в ASCII?
32. Как узнать о том, что строка включает в себя только пробелы?
33. Что случится, если умножить некую строку на 3?
Будет создана новая строка, представляющая собой исходную строку, повторённую три раза.
34. Как привести к верхнему регистру первый символ каждого слова в строке?
35. Как объединить две строки?
36. Как пользоваться методом partition()?
Метод partition() разбивает строку по заданной подстроке. После этого результат возвращается в виде кортежа. При этом подстрока, по которой осуществлялась разбивка, тоже входит в кортеж.
37. Строки в Python иммутабельны. Что это значит?
При конкатенации ‘Rise each day before the sun’ и ‘ if its a weekday’ в памяти создаётся новый объект, имеющий новый идентификатор. Если бы исходный объект менялся бы, тогда у объектов был бы один и тот же идентификатор.
38. Если объявить одну и ту же строку дважды (записав её в 2 разные переменные) — сколько объектов будет создано в памяти? 1 или 2?
В качестве примера подобной работы со строками можно привести такой фрагмент кода:
При таком подходе в памяти создаётся лишь один объект. Когда я столкнулся с этим в первый раз, мне это не показалось интуитивно понятным. Но этот механизм помогает Python экономить память при работе с длинными строками.
39. Как пользоваться методами maketrans() и translate()?
Метод maketrans() позволяет описать отображение одних символов на другие, возвращая таблицу преобразования.
Метод translate() позволяет применить заданную таблицу для преобразования строки.
40. Как убрать из строки гласные буквы?
Один из ответов на этот вопрос заключается в том, что символы строки перебирают, пользуясь механизмом List Comprehension. Символы проверяют, сравнивая с кортежем, содержащим гласные буквы. Если символ не входит в кортеж — он присоединяется к новой строке.
41. В каких ситуациях пользуются методом rfind()?
Итоги
Я часто объясняю одному продакт-менеджеру, человеку в возрасте, что разработчики — это не словари, хранящие описания методов объектов. Но чем больше методов помнит разработчик — тем меньше ему придётся гуглить, и тем быстрее и приятнее ему будет работаться. Надеюсь, теперь вы без труда ответите на рассмотренные здесь вопросы.
Уважаемые читатели! Что, касающееся обработки строк в Python, вы посоветовали бы изучить тем, кто готовится к собеседованию?
С троки в языке программирования Python — это объекты, которые состоят из последовательности символов.
Наравне с bool, int и другими типами данных, работа со строковым типом является неотъемлемой частью программирования, так как очень редко встречаются приложения, в которых не используется текст.
Вводная информация о строках
Как и во многих других языках программирования, в Python есть большая коллекция функций, операторов и методов, позволяющих работать со строковым типом.
Что представляют собой строки в Python
С точки зрения Питона, строка — это упорядоченная последовательность символов, которая предназначена для хранения информации в виде простого текста.
Поэтому тип данных string используется в случае, когда что-то нужно представить в текстовой форме.
Литералы строк
Литерал — способ создания объектов, в случае строк Питон предлагает несколько основных вариантов:
Если внутри строки необходимо расположить двойные кавычки, и сама строка была создана с помощью двойных кавычек, можно сделать следующее:
>>> ‘book «war and peace»‘ # разный тип кавычек ‘book «war and peace»‘ >>> «book ‘war and peace'» # разный тип кавычек «book ‘war and peace'» >>> «book \»war and peace\»» # экранирование кавычек одного типа ‘book «war and peace»‘ >>> ‘book \’war and peace\» # экранирование кавычек одного типа «book ‘war and peace'»
💡 Разницы между строками с одинарными и двойными кавычками нет — это одно и то же
Какие кавычки использовать — решать вам, соглашение PEP 8 не дает рекомендаций по использованию кавычек. Просто выберите один тип кавычек и придерживайтесь его. Однако если в стоке используются те же кавычки, что и в литерале строки, используйте разные типы кавычек — обратная косая черта в строке ухудшает читаемость кода.
Кодировка строк
В третьей версии языка программирования Python все строки представляют собой последовательность Unicode-символов.
В Python 3 кодировка по умолчанию исходного кода — UTF-8. Во второй версии по умолчанию использовалась ASCII. Если необходимо использовать другую кодировку, можно разместить специальное объявление на первой строке файла, к примеру:
Максимальная длина строки в Python
Максимальная длина строки зависит от платформы. Обычно это:
>>> import sys >>> sys.maxsize 2147483647
Перенос строк
Перенос строки осуществляется с помощью символа \n :
>>> text = «one\ntwo\nthree» >>> print(text) one two three
Далеко не всегда желательной является зависимость от регистра, в таком случае можно привести обе строки к одному и тому же регистру. Для этого используются функции lower() — для приведения к нижнему и upper() — к верхнему:
Объявить пустую строку можно следующими способами:
Как удалить строку в Python
Или перезаписать переменную пустой строкой:
Обращение по индексу
Для выбора определенного символа из строки можно воспользоваться обращением по индексу, записав его в квадратных скобках:
>>> s = «abcdef» >>> s[0] ‘a’ >>> s[2] ‘c’
Индекс начинается с 0
В Python предусмотрена возможность получить доступ и по отрицательному индексу. В таком случае отсчет будет вестись от конца строки:
Форматирование строк
Часто возникает ситуация, когда необходимо создать строку, подставив в нее определенные значения, полученные во время выполнения программы. Подстановка данных в таком случае выполняется при помощи форматирования строк, сделать это можно несколькими способами.
Оператор %
Строки в Python обладают встроенной операцией, к которой можно получить доступ оператором %, что дает возможность очень просто делать форматирование. Самый простой пример — когда для подстановки нужен только один аргумент, значением будет он сам:
>>> name = «Alex» >>> ‘Hello, %s’ % name ‘Hello, Alex’
Если же для подстановки используется несколько аргументов, то значением будет кортеж со строками:
Как видно из предыдущего примера, зависимо от типа данных для подстановки и того, что требуется получить в итоге, пишется разный формат. Наиболее часто используются:
Такой способ форматирования строк называет «старым» стилем, который в Python 3 был заменен на более удобные способы.
💭 В Python 3 форматирование строк с использованием «нового стиля» является более предпочтительным по сравнению с использованием %-стиля, так как предоставляет более широкие возможности, не усложняя простые варианты использования.
f-строки (Python 3.6+)
В Python версии 3.6 появился новый метод форматирования строк — «f-строки», с его помощью можно использовать встроенные выражения внутри строк:
>>> name = ‘Alex’ >>> f’Hello, !’ ‘Hello, Alex!’
Такой способ форматирования очень мощный, так как дает возможность встраивать выражения:
Таким образом, форматирование с помощью f-строк напоминает использование метода format(), но более гибкое, быстрое и читабельное.
Стандартная библиотека Template Strings
Функции для работы со строками
Для работы со строками в Питоне предусмотрены специальные функции. Рассмотрим их:
Преобразование числового или другого типа к строке:
Методы для работы со строками
Кроме функций, для работы со строками есть немало методов:
>>> text = «Wikipedia is a Python library that makes it easy to access and parse data from Wikipedia» >>> text.find(«Wikipedia») 0 >>> text.rfind(«Wikipedia») 79 >>> text.replace(«from Wikipedia», «from https://www.wikipedia.org/») ‘Wikipedia is a Python library that makes it easy to access and parse data from https://www.wikipedia.org/’ >>> text.split(» «) [‘Wikipedia’, ‘is’, ‘a’, ‘Python’, ‘library’, ‘that’, ‘makes’, ‘it’, ‘easy’, ‘to’, ‘access’, ‘and’, ‘parse’, ‘data’, ‘from’, ‘Wikipedia’] split_text = text.split(» «) >>> «_».join(split_text) ‘Wikipedia_is_a_Python_library_that_makes_it_easy_to_access_and_parse_data_from_Wikipedia’ >>> text = » test » >>> text.strip() ‘test’ >>> text.lstrip() ‘test ‘ >>> text.rstrip() ‘ test’ >>> text = «Python is a product of the Python Software Foundation» >>> text.lower() ‘python is a product of the python software foundation’ >>> text.upper() ‘PYTHON IS A PRODUCT OF THE PYTHON SOFTWARE FOUNDATION’ >>> text = «python is a product of the python software foundation» >>> text.capitalize() ‘Python is a product of the python software foundation’
Преобразование из строки в другой тип
В Питоне строки можно преобразовывать в другие типы данных:
string to int
Функция int() преобразовывает целое число в десятичной системе, заданное как строка, в тип int:
При необходимости можно указывать систему счисления:
>>> int(«0x12F», base=16) 303
string to list
Самый простой способ преобразования строки в список строк — метод split() :
>>> ‘one two three four’.split() [‘one’, ‘two’, ‘three’, ‘four’]
Для преобразования строки в число с плавающей точкой используется стандартная функция float :
string to dict
Создание словаря из строки возможно, если внутри нее данные в формате json. Для этого можно воспользоваться модулем json :
string to json
Конвертация объектов Python в объект json выполняется функцией dumps() :
>>> import json >>> json.dumps(«hello») ‘»hello»‘
Best practices
Как разбить строку на символы
Разбиение строки на отдельные символы выполняется несколькими способами:
>>> text = «django» # вариант 1 >>> list(text) [‘d’, ‘j’, ‘a’, ‘n’, ‘g’, ‘o’] # вариант 2 >>> [c for c in «text»] [‘t’, ‘e’, ‘x’, ‘t’] # вариант 3 >>> for c in text: print(c) d j a n g o
Как из строки выделить числа
Для извлечения чисел из строки можно воспользоваться методами строк:
>>> str = «h3110 23 cat 444.4 rabbit 11 2 dog» >>> [int(s) for s in str.split() if s.isdigit()] [23, 11, 2]
Данный пример извлекает только целые положительные числа. Более универсальный вариант – регулярные выражения:
Существует несколько способов перевернуть строку, начиная от классического – запустить цикл в обратной последовательности, выбирая каждый символ с конца и вставляя его в новую строку, и заканчивая срезами – вариант только для Питона.
С помощью среза — самый быстрый способ:
Использование reversed() и str.join() :
Как удалить последний символ в строке
Как и в предыдущем случае – чтобы убрать последний символ наиболее простым и быстрым вариантом будет использование среза:
>>> «Some text1″[:-1] ‘Some text’
Как убрать пробелы из строки
В случае удаления пробелов со строки может быть два варианта:
1 Обрезать строку так, чтобы удалить с нее первый и последний пробел, такой вариант может пригодиться, когда пользователь случайно поставит пробел в конце введенного текста:
>>> » Some text «.strip() ‘Some text’
2 Удалить со строки все пробелы:
>>> » So me t e x t «.replace(‘ ‘, ») ‘Sometext’
Работа со строками — неотъемлемая часть создания практически любого приложения, где используется текст, и язык программирования Python предоставляет широкие возможности работы с такими данными.