Строки в Python

В этом руководстве вы научитесь создавать, форматировать, изменять и удалять строки в Python. А еще познакомитесь с различными строковыми операциями и функциями.

Что такое строка

Строка — это последовательность символов.

Символ — это просто одиночный символ. Например, в английском языке 26 символов, букв. 

Компьютер работает не с символами, а с числами в двоичной записи. Вы видит на экране символы, но компьютер хранит и обрабатывает их как комбинацию нулей и единиц. 

Преобразование символа в число называется кодированием, а обратный процесс — декодированием. О самых известных стандартах кодирования вы, скорее всего, слышали. Это ASCII и Unicode.

В Python каждая строка — это последовательность символов Юникода, поскольку он позволяет использовать символы из всех языков мира и обеспечивает единообразие кодировки.

Подробнее о Юникоде в Python.

Как создать строку

Если заключить набор символов в одинарные '' или двойные "" кавычки с двух сторон, получится строка. В Python можно использовать и тройные кавычки '''''', но их обычно используют для многострочных строк и строк документации.

# все способы ниже эквиваленты: они делают одно и то же
my_string = 'Привет'
print(my_string)

my_string = "Привет"
print(my_string)

my_string = '''Привет'''
print(my_string)

# тройные кавычки позволяют создавать многострочные строки
my_string = """Привет, добро пожаловать
           в мир Python"""
print(my_string)

Вывод:

Привет
Привет
Привет
Привет, добро пожаловать
          в мир Python

Как получить доступ к символам в строке

1. По индексу

Получить доступ к отдельным символам в строке можно стандартным способом — по индексу. 

Примечание. Первый элемент в строке (то есть первый символ) Python имеет индекс 0. 

Индекс всегда должен быть целым числом, поэтому тип float не подойдет. Использование в качестве индекса числа с плавающей точкой приведет к ошибке TypeError.

Если вы попытаетесь получить доступ к символу с индексом, который больше длины строки, Python выдаст ошибку IndexError.

Индекс не обязательно должен быть положительным числом. Python поддерживает и «отрицательную индексацию». Индекс -1 ссылается на последний символ, -2 — на предпоследний и так далее. 

2. С помощью среза

Получить доступ к символам в строке можно и с помощью слайсинга (от англ. «нарезание»). Таким способом удобно получать набор символов в заданном диапазоне. 

Срезы задаются с помощью квадратных скобов [] и 2-3 аргументов через двоеточие :

my_collection[старт:стоп:шаг]
string = 'codechick'
print('string = ', string)

#первый символ
print('string[0] = ', string[0])

#последний символ
print('string[-1] = ', string[-1])

#срез от 2 до 5 символа
print('string[1:5] = ', string[1:5])

#срез от 6 до предпоследнего символа
print('string[5:-2] = ', string[5:-2])

Вывод:

string =  codechick
string[0] =  c
string[-1] =  k
string[1:5] =  odec
string[5:-2] =  hi

Если мы попытаемся получить доступ к символу с индексом вне допустимого диапазона или использовать не целые числа, получим ошибку.

Помните строку my_string? 

# длина строки my_string = 6 символов, а мы пытаемся получить 15 символ
>>> my_string[15] 
...
IndexError: string index out of range

# индекс должен быть целым числом
>>> my_string[1.5]
...
TypeError: string indices must be integers

Как изменить или удалить строку

Строка — неизменяемый тип данных. Это значит, что мы не можем изменить элементы строки после создания. Зато можем переназначать разные строки одной и той же переменной. 

>>> my_string = 'codechick'
>>> my_string[5] = 'a'
...
TypeError: 'str' object does not support item assignment
>>> my_string = 'Python'
>>> my_string
'Python'

По той же причине нельзя удалять символы из строки. Зато можно полностью удалить строку: для этого используйте ключевое слово del

>>> del my_string[1]
...
TypeError: 'str' object does not support item deletion

>>> del my_string
>>> my_string
...
NameError: name 'my_string' is not defined

Строковые операции

Строки — один из самых часто используемых типов данных в Python, поэтому для работы с ними существует куча встроенных операций.

Конкатенация строк

Конкатенация — это объединение двух или более строк в одну. 

Эту операцию в Python выполняет оператор +. А с помощью оператора * можно повторить строку заданное количество раз — «умножить» строку на число.

string1 = 'Привет, '
string2 ='мир!'

# используем +
print('string1 + string2 = ', string1 + string2)

# используем *
print('string1 * 3 =', string1 * 3)

Вывод:

string1 + string2 =  Привет, мир!
string1 * 3 = Привет, Привет, Привет, 

Если просто написать рядом два строковых литерала, они тоже объединятся в одну строку. Еще можно использовать круглые скобки. Давайте рассмотрим пример.

>>> # два строковых литералы записаны вместе
>>> 'Привет, ''мир!'
'Привет, мир!'

>>> # круглые скобки объединяют строковые литералы
>>> s = ('Привет, '
...     'мир')

>>> s
'Привет, мир'

Итерирование по строке

В Python можно «пройтись» по строке, то есть перебрать все символы в ней. Для этого нужно использовать цикл for

count = 0
for letter in 'Привет, мир!':
    if (letter == 'и'):
        count += 1
print(count, 'буквы «и» в данной строке')

Вывод:

2 буквы «и» в данной строке

Проверка на вхождение

В Python можно проверить, находится ли данная подстрока в строке или нет с помощью операторов членства in и not in.

>>> 'chick' in 'codechick'
True

>>> 'code' not in 'codechick'
False

Функции для работы со строками

Практически все встроенные функции, которые работают с последовательностями, точно так же работают со строками. 

Самые полезные:

  • enumerate() —  позволяет перебирать строку, отслеживая индекс текущего элемента. 
  • len() — возвращает длину строки. 
string = 'кодер'

# enumerate()
list_enumerate = list(enumerate(string))
print('list(enumerate(string) = ', list_enumerate)

# считаем количество символов
print('len(string) = ', len(string))

Вывод:

list(enumerate(string) =  [(0, 'к'), (1, 'о'), (2, 'д'), (3, 'е'), (4, 'р')]
len (string) = 5

Методы строк

split(символ)

Разбивает строки по заданном разделителю (по умолчанию — пробел)

join(список)

«Собирает» строку из списка с разделителем

find(подстрока, начало, конец)

Поиск подстроки в строке. Возвращает индекс первого вхождения слева. Если подстроки в строке нет, возвращает -1

index(подстрока, начало, конец)

Поиск подстроки в строке. Возвращает индекс первого вхождения. Если подстроки в строке нет, возвращает ValueError

replace(шаблон, замена)

Замена шаблона в строке

isdigit()

Проверяет, состоит ли строка из цифр. Возвращает True или False

isalpha()

Проверяет, состоит ли строка из букв. Возвращает True или False

islower()

Проверяет, состоит ли строка из символов в нижнем регистре. Возвращает True или False

isupper()

Проверяет, состоит ли строка из символов в верхнем регистре. Возвращает True или False

upper()

Преобразует строку к верхнему регистру

lower()

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

ord(символ)

Преобразует символ в ASCII-код

chr(число)

Преобразует ASCII-код в символ

>>> "CoDeCHicK".lower()
'codechick'

>>> "CoDeCHicK".upper()
'CODECHICK'

>>> "Эта инструкция разобьет строку и засунет элемент в список".split()
['Эта', 'инструкция', 'разобьет', 'строку', 'и', 'засунет', 'элемент', 'в', 'список']

>>> ' '.join(['Эта', 'инструкция', 'соберет', 'все', 'слова', 'в', 'одну', 'строку'])
'Эта инструкция соберет все слова в одну строку'

>>> 'Счастливого Рождества!r'.find('ож')
13

>>> 'Счастливого Рождества!'.replace('Счастливого', 'Чудесного')
'Чудесного Рождества!'

Как форматировать строки

Управляющие последовательности

Допустим, нам нужно напечатать на экран такое сообщение: He said, "What's there?" (Он сказал: «Что там?»). Проблема в том, что в этом тексте есть и двойные, и одинарные кавычки (апостроф), поэтому мы не можем использовать их для создания строки — это приведет к ошибке SyntaxError. 

>>> print("He said, "What's there?"")
...
SyntaxError: invalid syntax

>>> print('He said, "What's there?"')
...
SyntaxError: invalid syntax

Эта проблема больше актуальная для английского языка, поскольку в русском не используют апострофы, но знать, как ее решить, надо всем. 

Есть два способа обойти эту проблему: использовать тройные кавычки или escape-последовательности — их еще иногда называют управляющими последовательностями.

Вот, как это выглядит на практике. 

# с помощью тройных кавычке
print('''He said, "What's there?"''')

# escape-последовательность и одинарные кавычки
print('He said, "What\'s there?"')

# escape-последовательность и двойные кавычки
print("He said, \"What's there?\"")

Вывод:

He said, "What's there?"
He said, "What's there?"
He said, "What's there?"

Список escape-последовательностей

Управляющая последовательность

Описание

\\

Экранирование обратного слэша

\'

Экранирование одинарной кавычки

\"

Экранирование двойной кавычки

\a

Звуковой сигнал или предупреждение

\b

Возврат на одну позицию

\n

Перенос строки на новую

\r

Возврат каретки

\t

Горизонтальный Tab

\v

Вертикальный Tab

\ooo

Восьмеричное значение

\xHH

Шестнадцатеричное значение

>>> print("C:\\Python32\\Lib")
C:\Python32\Lib

>>> print("Это сообщение печатается\на двух строках")
Это сообщение печатается
на двух строках

Игнорирование управляющих последовательностей 

Чтобы Python проигнорировал escape-последовательность в строке, можно написать перед этой строкой r или R

>>> print("Это \nхороший пример")
Это 
хороший пример

>>> print(r"Это \nхороший пример")
Это \nхороший пример

Метод format()

Метод format() — очень гибкий и мощный инструмент для форматирования строк. В качестве заполнителей используются фигурные скобки {}.

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

# порядок по умолчанию
default_order = "{}, {} и {}".format('Петя','Ваня','Катя')
print('\n--- Порядок по умолчанию ---')
print(default_order)

# порядок с позиционными аргументами
positional_order = "{1}, {0} и {2}".format('Петя','Ваня','Катя')
print('\n--- Позиционный порядок ---')
print(positional_order)

# порядок по ключевым словам
keyword_order = "{s}, {b} и {j}".format(j='Петя',b='Петя',s='Катя')
print('\n--- Порядок по ключевым словам ---')
print(keyword_order)

Вывод:

--- Порядок по умолчанию ---
Петя, Ваня и Катя

--- Позиционный порядок ---
Ваня, Петя и Катя

--- Порядок по ключевым словам ---
Катя, Ваня и Петя

У метода format() есть дополнительные настройки. Они отделяются от имени поля двоеточием :. Например, строку можно выровнять по левому краю <, по правому краю > или центрировать ее ^.

Точно так же можно форматировать целые числа в их двоичные, шестнадцатеричные записи и т. д. А числа с плавающей точкой можно округлять или отображать в экспоненциальной записи. 

>>> # форматирование целых чисел
>>> "Двоичное запись числа {0} = {0:b}".format(12)
'Двоичная запись числа 12 = 1100'

>>> # форматирование чисел с плавающей точкой
>>> "Экспоненциальное представление: {0:e}".format(1566.345)
'Экспоненциальное представление: 1.566345e+03'

>>> # округление
>>> "Одна треть = {0:.3f}".format(1/3)
'Одна треть = 0.333'

>>> # выравнивание строк
>>> "|{:<10}|{:^10}|{:>10}|".format('масло', 'булка', 'колбаса')
'|масло    |  булка  |       колбаса|'
codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©