[ЗВУК] [ЗВУК] Перед тем как продолжить изучать списки и методы, которые есть у них, перейдем ненадолго к строкам и посмотрим, как строки и списки связаны между собой. Самое простое — это создание списка из строки. По аналогии со всеми предыдущими объектами для создания списков есть функция list, которая получает в качестве параметра нечто итерируемое. У нас прямо подсказка — iterable. Как мы знаем, строка является итерируемым объектом, то есть если мы передали какую-то строку, то у нас получится список, содержащий все элементы, то есть буквы из нашей строки. Посмотрим — действительно так все получилось. Для чего это бывает нужно? Если нам нужно что-то достаточно большое изменить в строке, то есть многие символы поменять, например, на другие символы, то что можно сделать? Можно взять строку, сделать из нее список, что-то поменять и собрать строку обратно. Собирать строку обратно из списка мы пока не умеем, но сейчас научимся. Для того чтобы собрать строку, давайте, например, сделаем какое-нибудь изменение — нулевой элемент списка, букву a, заменим на какую-нибудь другую букву. И теперь мы хотим собрать строку обратно. Конечно, если мы хотим напечатать, можно пробежаться циклом и вывести по одной букве. Но это, во-первых, медленно, во-вторых, эта строка может быть нам нужна для чего-то другого и, собственно, она нужна будет как строка. Что мы можем сделать? Мы можем воспользоваться методом join для строк. Join — это «объединение». Как это работает? Мы указываем строку-разделитель. В нашем случае мы хотим склеить просто все буквы, безо всяких разделителей, поэтому пишем пустую строку, две кавычки. Вызываем от нее метод join, который принимает в качестве параметра список строк, которые нужно объединить — наш список называется a. И теперь у нас будут поочередно браться все элементы списка a и объединяться, после каждого из них будет вставляться разделитель. В нашем случае не будет вставляться ничего. Давайте напечатаем нашу строку и убедимся, что, действительно, изменения произошли и это одна строка теперь, набор символов. То есть вот так вот работает метод join, мы посмотрим еще на некоторых примерах. Очень часто в задачах нужно считать список, например, слов. Как считать список слов? Слова эти разделены пробелом. Какие-то последовательности непробельных символов. Для этого существует метод для строки опять же, который называется split. split — это метод разделения строки на токены, на слова условно. Разделителем может выступать что угодно. Вот я напишу сразу от input'а, то есть от считанной строки. Ну давайте я напечатаю этот список, посмотрим, он должен выглядеть как список. Итак, мы считываем строку с помощью input'а, вызываем метод split. Метод split выплевывает нам, возвращает список слов, строк, по сути, разделенных любыми разделителями. Это пробелы, это табуляция, это переводы строки. Перевод строки сложно сочетать с input'ом, но тем не менее как-нибудь его туда положить можно хотя бы руками. Итак, запускаем, теперь оно ждет ввода. Давайте введем какие-нибудь слова. Можно использовать несколько пробелов, то есть вот здесь я поставил сразу много пробелов. Сейчас посмотрим, как split это обработает. Вот, у нас получился список слов и даже если у нас шло несколько разделителей подряд, они все проглатываются и нарезаются ровно на слова, не содержащие пробельных каких-то символов. Если вы хотите резать только по чему-то одному, например, по только по пробелам, если у вас там были символы табуляции, то вы указываете split, делаете с параметром. Параметр — это одна строка, содержащая все символы, по которым вы хотите нарезать. Например, вы хотите резать по буквам a и b. Давайте посмотрим, что при этом произойдет. Вот у нас есть строка, буковка a, еще какая-то строка, буковка b, еще какая-то строка, буковка a ну и еще что-то. Отлично. Оно никак не нарезалось. Давайте попробуем по буковкам a чисто нарезать. Давайте я попробую что-то более осмысленное, чтобы было легче читать. Вот, по буквам a оно нарезалось, то есть вы в качестве параметра split'а указываете, по чему оно должно резаться. По умолчанию, если нет никаких параметров, то пробелы, табуляции, переводы строки. Чаще всего это бывает нужно, если вы хотите нарезать строку только, например, по табуляциям. Это бывает нужно, когда вы обрабатываете какие-то данные, tab separated values например есть, или есть тоже формат хранения электронных таблиц — csv (comma separated values), «значения, разделенные запятыми». Тогда вы просто делаете split по запятым и получаете все ваши значения из ячеек. Итак, вот так работает наш split, чаще всего мы будем пользоваться split'ом без параметров. Мы научились получать список слов, теперь нам нужно решить такую задачу: получить список чисел, то есть у нас задается несколько чисел, записанных в одну строку. Что для этого нам потребуется? Если мы просто напишем input split, у нас получится список слов. Но есть замечательная функция map на языке Питон. map — это такая функция, которая позволяет применить какую-то функцию к каждому объекту списка. Вот у нас есть список слов, и мы применим функцию int к нему. То есть записывается это так: map int, просто безо всяких скобок, без всего имя функции, которая будет применена к объектам, и затем список, к которому она будет применена, в нашем случае — список слов, нарезанный по пробелам. Функция map возвращает итерируемый объект, а нам нужно получить список наших чисел, поэтому мы к результату выполнения функции map применим функцию list, которая будет забирать по одному наши объекты по итератору и затем соберет из них список. Давайте проверим, что у нас оно заработало, и выведем просто тот список чисел, который у нас был. Да, вот он у нас — список, содержащий числа. И теперь можно решать задачи, не только когда у вас числа задаются по одному в строке, а когда у вас числа разделены, например, пробелами, но их нужно считать в список и что-то с ними потом делать. Во многих задачах сегодняшних, в принципе, можно обойтись без списка, если там немножко подумать, а иногда и думать не нужно. Но во всех задачах входные данные даются через пробел, поэтому их просто не сможете считать, не создав вот такого рода список. Конечно, это выглядит немножко искусственно, но зато теперь деваться вам некуда и вы научитесь считывать и сохранять наборы чисел. Как печатать числа? Например, мы хотим вывести эти числа, чтобы они у нас были не в квадратных скобочках через запятую, а через пробел. Напомню, что у нас был метод join для объединения списков. Давайте попробуем его сейчас использовать. То есть мы пишем: пробел — чем мы хотим разделить — в кавычках, точка, join и список, который мы хотим изменить. Раньше мы играли со списком из строк, теперь попробуем, будет ли оно работать, если список состоит из чисел. Оно ждет нашего ввода — давайте что-нибудь введем корректное — и ломается. Значит, что оно говорит? Оно говорит, в какой строке оно сломалось — во второй — и почему оно сломалось. Оно говорит, что в последовательности элемент номер 0 ожидалось str — строка, а нашлось int — число. То есть join работает только для списка, состоящего из строк. Что мы можем сделать? Можем превратить наш список чисел в итерируемый объект, состоящий из строк. Функция map делает итерируемый объект, и методу join, на самом деле, нужен итерируемый объект. То есть мы можем написать пробел, точка, join, map, str и список чисел. В результате этого функция str применится к каждому элементу списка чисел, получатся строки и уже с ними все будет работать, потому что join как раз ждет наших строк. Давайте посмотрим. Вот он, наш список чисел напечатался. На самом деле, для печати списка чисел необязательно каждый раз городить вот такую вот достаточно сложную конструкцию из пробела, точки, join, map, str, названия списка, а существует специальная такая возможность для печати списка чисел: * и название списка. Во многих случаях это будет ровно то, что нам нужно. Оно печатает все содержимое списка через пробел, какие бы элементы там не содержались, то есть, в принципе, для списка строк тоже подходит. Если же вам нужно напечатать более хитрым образом, например по одному в строке, то уже звездочка вам не подойдет и вам придется писать: \n — перевод строки, точка, join и так далее — объединять список строк. Как я уже говорил, во многих задачах вывод через пробел вполне подходит, и писать, конечно, гораздо меньше, и этим способом нужно пользоваться. [ЗВУК] [ЗВУК]