Найти в Дзене
Журнал разработчика

Запись 34. Ещё один тип данных – строки

Разберём ещё один тип данных – string(), ну или строки по-нашему. Строка – это последовательность символов, а раз последовательность, значит её можно перебирать. Но об этом чуть позже. А пока разберёмся с тем, как создать строку. Для этого надо написать любой текст и заключить его в апострофы или в кавычки Особой разницы нет, но не надо смешивать, т.е. поставить перед строкой апостроф, а после кавычки, не получится – это приведёт к ошибке. А вот такое написание допустимо: Кавычки внутри апострофов, ну или наоборот. Результат будет таким: Сложение и умножение строк Самое простое, что можно сделать со строками – это сложить их. Например, так: Результатом станет единая строка: Ещё можно умножить строку на число, что скопирует её заданное количество раз объединив в одну длинную строку: Это простейшие действия со строками... перейдём к более сложным. Перебор символов в цикле Вернёмся к тому, что строка – это последовательность. Попробуем перебрать в цикле слово "python": Из примера видно, ч
Оглавление

Разберём ещё один тип данных – string(), ну или строки по-нашему.

Строка – это последовательность символов, а раз последовательность, значит её можно перебирать. Но об этом чуть позже. А пока разберёмся с тем, как создать строку.

Для этого надо написать любой текст и заключить его в апострофы

-2

или в кавычки

-3

Особой разницы нет, но не надо смешивать, т.е. поставить перед строкой апостроф, а после кавычки, не получится – это приведёт к ошибке.

А вот такое написание допустимо:

-4

Кавычки внутри апострофов, ну или наоборот. Результат будет таким:

-5

Сложение и умножение строк

Самое простое, что можно сделать со строками – это сложить их. Например, так:

-6

Результатом станет единая строка:

-7

Ещё можно умножить строку на число, что скопирует её заданное количество раз объединив в одну длинную строку:

-8

Это простейшие действия со строками... перейдём к более сложным.

Перебор символов в цикле

Вернёмся к тому, что строка – это последовательность. Попробуем перебрать в цикле слово "python":

Печатаем каждый отдельный символ слова
Печатаем каждый отдельный символ слова
Результат будет таким
Результат будет таким

Из примера видно, что на каждой итерации цикла переменная char получает в качестве значения очередной символа из заданного слова word.

Индексация символов

Помимо этого, каждый символ имеет свой порядковый номер – индекс. Индексация ведётся слева-направо и начинается с нуля.

-11

По индексу можно получить отдельный символ слова, например так:

Обратите внимание, что индекс указывается сразу за словом в квадратных скобках
Обратите внимание, что индекс указывается сразу за словом в квадратных скобках

В результате будет выведен символ "h". Да, он идёт четвёртым в слове, но индекс у него "3", т.к. отсчёт идёт с нуля.

Кстати, индекс может быть и отрицательным. Тогда отсчёт будет идти с конца слова.

-13

Этот код выведет символ "n" – последний в слове, т.к. в данном случае отсчёт идёт с единицы.

Перебор символов в цикле по индексам

Зная об индексах, можем реализовать перебор символов слова несколько иначе. Но сначала разберёмся с длиной строк. Функция len() возвращает длину строки, т.е. количество символов в строке.

-14

В результате получим 6.

Вот теперь можно перебирать:

-15

В данном случае мы обращаемся не непосредственно к символу в слове, а к самому слову, указав при этом индекс символа. Как-то так. Перечитайте пару раз, если не всё понятно )

Преобразуем строку в список и множество

И снова вернёмся к тому, что строка – это последовательность. (Я вас ещё не утомил?) А какие ещё последовательности мы уже знаем? Правильно... списки и множества!

Так почему бы не попробовать преобразовать строку в одну из них? Ну или в обе. Так вперёд! Но в этот раз поработаем со словом "колобок".

-16

Для преобразования используем функции list() и set(). Посмотрим же на результат:

-17

Как видим в первом случае получился список символов, ВСЕХ символов, да ещё и в том же порядке, в котором они идут в слове. Почему сделан акцент на всех символах? Да потому что во втором случае части символов нет. Каких? Тех, которые повторяются. Множество их исключило.

Разберём и соберём

Строку можно разобрать на отдельные слова и создать из них список. Или же наоборот, объединить слова из списка в одну строку. Для этого нам понадобятся два метода: split() и join().

Где может пригодиться?

Допустим у вас есть строка, которая содержит фамилию, имя и отчество. Из неё надо получить каждый элемент по отдельности, чтобы, например, использовать только имя, или фамилию и имя, или имя и отчество, ну вы поняли...

Или обратная ситуация. Из отдельных элементов надо получить строку с полным ФИО.

Разбираем... метод split()

Возьмём строку "Иванов Иван Иванович" и применим к ней вышеуказанный метод.

-18

Напомню, что метод – это та же функция, но применяемая к конкретному объекту (в нашем случае к строке в переменной full_name). А раз функция, значит не забываем про круглые скобки "()", даже если ничего в них не указываем. Итак, наш результат.

-19

Теперь можно комбинировать эти элементы как нам вздумается:

Хочешь имя, отчество... пожалуйста:

-20

Фамилия, имя... легко:

-21

Теперь разберёмся с аргументом функции. Что если у вас есть какой-либо перечень, например, список продуктов через запятую:

-22

Попробуем разобрать его на части:

-23

Результат не совсем тот, который хотелось бы видеть. Есть лишние запятые.

-24

Вот тут и придёт на помощь аргумент. Укажем в качестве аргумента разделитель, по которому хотим разбить строку. В нашем случае это будет запятая и пробел – ", "

-25

В итоге получим то, что нужно:

И никаких лишних запятых
И никаких лишних запятых

Всё дело в том, что по умолчанию разделителем является пробел. Поэтому в случае с ФИО проблем не было. А вот для списка продуктов пришлось явно указывать разделитель.

Идём дальше... соберём элементы списка в строку.

Собираем... метод join()

Для примера снова возьмём ФИО и список продуктов.

Начнём с ФИО. Пусть у нас есть список, содержащий отдельно фамилию, имя и отчество. Укажем символ, с помощью которого будет выполнено объединение, применим к нему метод join(), в который передадим список в качестве аргумента:

-27

В результате получим ФИО полностью одной строкой:

-28

Обратите внимание, что объектом, к которому применяется метод join() является "объединитель", т.е. символ (или группа символов). Сам же список идёт в качестве аргумента метода join().

Теперь к списку продуктов. Тут нам необходимо получить строку из продуктов, перечисленных через запятую (и пробел конечно же). Легче лёгкого... укажем в качестве "объединителя" нужные нам символы:

-29

И вот он... результат:

-30

Резюмируем

1) Строка – последовательность символов.

2) Строки можно складывать между собой и умножать строку на число.

3) Каждый символ в строке имеет индекс:

-31

4) Строку можно преобразовать в список или множество:

-32

5) Строку можно разобрать на элементы списка...

-33

6) ... или собрать из элементов списка

-34

На этом пока остановимся. Вопросы и предложения пишите в комментарии. Ещё было бы неплохо подписаться и поставить лайк.

А ещё подписывайтесь на канал в Telegram. Удачи!