[МУЗЫКА] Посмотрим, что мы можем делать со строками еще. Мы можем поменять регистры букв. Например, если у нас есть строка 'Hello' с большой буквы, мы можем попросить компьютер обновить эту строку и сделать все буквы маленькими. Также мы можем попросить компьютер обновить эту строку, сделав все буквы большими. [БЕЗ_ЗВУКА] Кроме этого, мы с вами уже касались метода очистки строк strip, он умеет удалять не только лишние пробелы. Предположим, у нас есть строка в точках. [БЕЗ_ЗВУКА] Мы можем попросить компьютер обновить нашу строчку, удалив лишние точки, сказав компьютеру, что лишними символами, от которых строчку надо очистить, будут точки. [БЕЗ_ЗВУКА] [БЕЗ_ЗВУКА] Мы можем вывести новую строчку на экран, подставив ее в строку, мы видим, что в этот раз компьютер не обратил внимание на совершенно лишние пробелы, стоящие вокруг слова «привет», зато обратил внимание на лишние точки. Кроме этого, мы можем попросить компьютер почистить строчку только с одного из двух концов. Например, если у нас есть строка в двух восклицательных знаках, — строка «привет» имеет восклицательный знак справа и слева, — мы можем попросить компьютер отдельно почистить ее справа, воспользовавшись методом r.strip, попросив его удалить лишний восклицательный знак, и мы можем попросить компьютер почистить нашу точку слева, воспользовавшись методом l.strip, который удалит лишние символы только слева. Списки и строки очень часто используют вместе, например, если у нас есть список из строк и мы со всеми строками в этом списке хотим что-то сделать. Предположим, у нас есть чудесный список. Пусть он называется просто li (от английского слова «list»), в нем есть какие-то слова, и мы хотим узнать длину всех этих слов. Мы, конечно, могли бы перебрать его с помощью цикла for и применить функцию len, которая вычисляет длину строки к каждому из элементов. Но задача пройти по целому списку и к каждому элементу применить какую-то команду является очень частой для мира программирования, и в языке Python для этого есть более простая команда, которая называется map. Команда map позволяет применить указанную нами команду по ее имени к указанному нами списку. Давайте посмотрим, как вообще сам компьютер, сам Python видит результат работы команды map. Мы видим что-то странное, с чем мы еще не умеем работать, поэтому для того чтобы понять результат работы этой команды, давайте превратим его во что-нибудь известное нам, например, в список или в кортеж. Я буду превращать в список. Мы видим, что результат работы команды map можно превратить в список, где под соответствующими индексами будут лежать результаты применения нашей указанной функции к соответствующим исходным элементам. Давайте теперь подумаем и попробуем применить к каждому из элементов, например, метод, который превратит все буквы в маленькие. Для этого нам будет нужно не просто указать название метода, как в случае с командой len, которая существует сама по себе, но и метод, который мы хотим использовать к каждому из элементов. [БЕЗ_ЗВУКА] Мы хотим к каждому из элементов использовать метод под названием lower, который относится к строкам, и мы хотим, чтобы этот метод был применен ко всем элементам списка под названием li. И мы хотим прочитать результат. Мы видим, что теперь в результате мы получили только список, состоящий из маленьких букв. Что ж, используем новые знания, чтобы проанализировать существующие тексты, например, фрагмент из «Капитанской дочки» Александра Сергеевича Пушкина. Возьмем фрагмент, положим его в какую-нибудь переменную. У нас тут огромный фрагмент, многие слова с буквами в разном регистре, есть невероятное количество совершенно разных знаков препинания, а нам бы хотелось сделать словарик, чтобы мы могли как-то проанализировать пушкинский язык. Давайте превратим эту строчку в список, а потом применим к каждому из элементов нашего списка какие-нибудь методы, которые позволят хоть как-нибудь стандартизировать слова и как-то их почистить. Для начала разобьем наш текст на отдельные элементы списка слов. [БЕЗ_ЗВУКА] Мы можем обратить внимание, что наш список слов сейчас включает какие-то совершенно не слова, например, отдельное троеточие в начале, слова включены в разном регистре, слова включены с находящимися рядом с ними знаками препинания. Давайте как-нибудь почистим наш список слов от всего лишнего. Для этого мы можем пройти по списку слов, перебрать его по всем индексам, [БЕЗ_ЗВУКА] и, беря очередной индекс, мы можем попросить компьютер обновить наше очередное слово, например, сделав его маленьким. Мы можем посмотреть на результат нашей работы [БЕЗ_ЗВУКА] в конце. Теперь в нашем списке чуть больше порядка, у нас хотя бы все слова написаны в одном регистре только с маленькими буквами. Давайте теперь почистим наши слова от неизвестных, ненужных нам символов — от знаков препинания. Для этого можно пройти по нашему списку еще раз, сделав новый цикл, а можно просто [БЕЗ_ЗВУКА] в уже имеющемся у нас цикле дописать новый метод. Сейчас я скопировал кусок программы, где мы задавали стартовый текст, скопировал кусок программы, где мы разделяли текст на отдельные слова, и скопировал кусок программы, где мы проходились по списку слов и каждое из них делали маленьким. Единственное, что я добавил: я попросил компьютер после того, как он превратил каждое из слов в слово только из маленьких букв, ... eще это слово почистить. И почистить я прошу от точек, запятых, восклицательного знака, знака вопроса и вот этих замечательных кавычек-елочек, которые здесь один раз встречаются. Давайте посмотрим, как будет вести себя компьютер, если мы соединим два метода в один и сначала попросим сделать все буквы маленькими, а потом сразу же в той же строке попросим и наши слова почистить от лишних знаков. И как видите, практически все слова теперь чистые, остались только знаки двоеточие и точка с запятой. Давайте скопируем программу и добавим эти чудесные знаки в список к очистке. И теперь у нас есть еще какое-то слово, которое стало пустым. У нас было ошибочное слово из трех точек, с которого начинался текст. После того, как мы попросили компьютер очистить наши слова от лишних точек, так получилось, что одно из слов просто стало пустым. Давайте сначала проверим, что мы почистили теперь все знаки препинания. Я еще раз скопировал программу и дописал только два знака в настройках команды очистки. Да, вроде бы больше никаких знаков препинания нет. И теперь давайте допишем в программу кусок, который будет удалять слово, если вдруг это слово стало пустым после всей процедуры очистки. Если слово стало пустым, то, пожалуйста, из списка слов удалить пустое слово. Но, к сожалению, если мы сейчас запустим нашу программу, она выдаст нам ошибку, потому что мы попросили компьютер удалить первое слово, все индексы в нашем списке сдвинулись на единицу, а цикл for об этом не узнал. Он думал, что у него есть все слова, а у него их оказалось на один меньше. Поэтому, чтобы не сталкиваться с такой ошибкой, имеет смысл сделать новый список и вместо удаления пустого слова из текущего списка просто не добавлять его в новый. Скопируем нашу программу и немного перепишем. Создадим новый список. Пусть он будет называться чистыми словами, он будет абсолютно пустым. И мы будем добавлять в этот список уже очищенных и готовых к работе слов только те слова, которые не пустые. Ну и на выходе из программы нас будет опять же интересовать теперь не список слов изначальный, а список очищенных слов. Давайте посмотрим, как теперь работает программа. Попросим вывести все слова через запятую. [ШУМ] [ШУМ] [ШУМ] Вуаля! [МУЗЫКА]