Методы списков и строк
Мы уже знакомы с некоторыми функциями для работы со списками, строками и множествами. Мы знаем также методы для работы с элементами множеств (add
, remove
, discard
и т. д.), метод append, который позволяет добавлять элементы в список, метод split
для разбиения строки на список «слов» и метод join
для «сшивки» списка строк в одну. Однако мы не знаем, как делать со списками многие другие вещи: добавлять элементы в произвольное место, удалять элементы и т. д. Такие задачи решаются с помощью других функций и методов.
Далее приводится перечень основных методов списков и строк, а также функций и специальных синтаксических конструкций для работы с ними, включая уже знакомые нам. Если при написании программы вы забудете, как называется тот или иной метод или какие у него аргументы, смело заглядывайте в материалы этого урока, в документацию, пользуйтесь поиском в Интернете или описанными здесь функциями dir
и help
.
В таблице предполагается, что:
a
иa2
— спискиx
— элемент спискаs
иs2
— строкиc
— символ (строка длины 1)n
— индекс элемента списка или строкиstart
,stop
,step
— границы среза (т. е. тоже индексы) и шаг срезаk
— натуральное число.
Для методов и функций также даны примеры выражений, которые будут истинными True
и демонстрируют действие этого метода. Например, выражения 5 in [2, 3, 5]
и 'abc'.isalpha()
равны True
. Их можно подставить в оператор if
(и соответствующий блок будет выполнен) или в функцию print
(и тогда она выведет True
).
Методы списков
Операция | Описание | Пример | |
---|---|---|---|
x in a | Проверка, что |
| |
x | Проверка, что То же, что и |
| |
a + a2 | Конкатенация списков, то есть новый список, в котором сначала идут все элементы |
| |
a * k | Список |
| |
a[n] |
|
| |
a[start:stop:step] | Срез списка |
| |
len(a) | Длина списка |
| |
max(a) | Максимальный элемент списка |
| |
min(a) | Минимальный элемент списка |
| |
sum(a) | Сумма элементов списка |
| |
a.index(x) | Индекс первого вхождения |
| |
a.count(x) | Количество вхождений |
| |
a.append(x) | Добавить |
| |
a.extend(a2) | Добавить элементы коллекции |
| |
del a[n] | Удалить |
| |
del a[start:stop:step] | Удалить из |
| |
a.clear() | Удалить из |
| |
a.copy() | Копия |
| |
a += a2 | Заменить содержимое списка на | ||
a *= k | Заменить содержимое списка на | ||
a.insert(n, x) | Вставить |
| |
a.pop(n) | Получить Вызов метода без аргументов равносилен удалению последнего элемента: |
| |
a.remove(x) | Удалить первое вхождение |
| |
a.reverse() | Изменить порядок элементов в |
| |
a.sort() | Отсортировать список по возрастанию |
| |
a.sort(reverse=True) | Отсортировать список по убыванию |
| |
bool(a) | Один из способов проверить список на пустоту (возвращает |
Методы строк
Операция | Описание | Пример |
---|---|---|
s2 in s | Проверка, что подстрока |
|
s2 not in s | Проверка, что подстрока |
|
s + s2 | Конкатенация (склейка) строк, то есть строка в которой сначала идут все символы из |
|
s * k | Строка |
|
s[n] |
|
|
s[start:stop:step] | Срез строки |
|
len(s) | Длина строки |
|
s.find(s2) | Индекс начала первого вхождения подстроки |
|
s.rfind(s2) | Индекс начала последнего вхождения подстроки |
|
s.count(s2) | Количество неперекрывающихся вхождений |
|
s.startswith(s2) | Проверка, что |
|
s.endswith(s2) | Проверка, что |
|
s += s2 | Заменить содержимое строки на | |
s *= k | Заменить содержимое строки на | |
s.isdigit() | Проверка, что в строке |
|
s.isalpha() | Проверка, что в строке |
|
s.isalnum() | Проверка, что в строке |
|
s.islower() | Проверка, что в строке Обратите внимание, что знаки препинания и цифры дают |
|
s.isupper() | Проверка, что в строке Обратите внимание, что знаки препинания и цифры дают |
|
s.lower() | Строка |
|
s.upper() | Строка |
|
s.capitalize() | Строка |
|
s.lstrip() | Строка |
|
s.rstrip() | Строка |
|
s.strip() | Строка |
|
s.ljust(k, c) | Добавляет справа нужное количество символов |
|
s.rjust(k, c) | Добавляет слева нужное количество символов |
|
s.join(a) | Склеивает строки из списка |
|
s.split(s2) | Список всех слов строки |
|
s.replace(s2, s3) | Cтрока |
|
list(s) | Список символов из строки строки |
|
bool(s) | Проверка, что строка не пустая (возвращает | |
int(s) | Если в строке s записано целое число, получить это число, иначе — ошибка |
|
float(s) | Если в строке s записано дробное число, получить это число, иначе — ошибка |
|
str(x) | Представить любой объект |
|
Обратите внимание: никакие методы строк, включая s.replace(...)
, не изменяют саму строку s
. Все они лишь возвращают измененную строку, в отличие от большинства методов списков.
a.sort()
, например, ничего не возвращает, а изменяет сам список a
.
Функции dir и help
Для получения информации о списке методов любого объекта (в том числе тех, о которых вы вряд ли хотели узнать) в Python существует специальная функция dir
. Например, dir([])
вернет все методы списков, и оператор print(dir([]))
выведет длинный список, оканчивающийся так: index
, insert
, pop
, remove
, reverse
, sort
.
Если же нам нужно узнать справочную информацию по конкретному методу или типу данных, для этого существует функция help
. help([])
выведет на экран много информации, большая часть которой пока лишняя. А вот help([].insert)
выведет на экран краткую справку именно по методу insert
, подсказывая, что первый аргумент этого метода — индекс, а второй — тот объект, который нужно вставить в список на этот индекс.
Форматированный вывод. f-строки
Этот блок урока не имеет отношения к методам списков и строк, но позволит нам познакомиться с возможностями форматированного вывода на экран переменных и выражений.
Начиная с версии 3.6 в Python появился новый тип строк — f-строки, которые улучшают читаемость кода и работают быстрее других способов форматирования.
f-строки, которые буквально означают formatted string, задаются с помощью литерала f перед кавычками:
f-строки делают очень простую вещь: они берут значения переменных, которые есть в текущей области видимости, и подставляют их в строку. В самой строке вам лишь нужно указать имя этой переменной в фигурных скобках.
В качестве подставляемого значения внутри фигурных скобок может быть: имя переменной (f"Меня зовут {name}"
), элемент списка (f"Третий месяц в году - {month[2]}"
) или словаря, методы объектов (f"Имя: {name.upper()}"
). f-строки позволяют выполнять базовые арифметические операции (f"({x} + {y}) / 2 = {(x + y) / 2}"
) и даже вызывать функции (f"13 / 7 = {round(13/7)}"
).
Кроме того, вы можете задавать форматирование для чисел.
Указать необходимое количество знаков после запятой, спецификатор f отвечает за вывод чисел с плавающей точкой (тип
float
):
Представить результат в двоичной системе счисления, используя спецификатор
b
:
Аналогично для шестнадцатеричной системы счисления используется спецификатор x
, а для восьмеричной — o
.
Подробнее о допустимых вариантах форматирования можно почитать в документации или на вот этом ресурсе.
Цепочки вызовов
Бывает удобно строить последовательные цепочки вызовов методов.
Например, s.strip().lower().replace('ё', 'е')
выдаст строку s
, в которой убраны начальные и конечные пробелы, все буквы сделаны маленькими, после чего убраны все точки над Ё
. В результате этого преобразования строка Зелёный клён
превратится в зеленый клен
.
Другой пример:
В данном примере строка сначала полностью приводится к нижнему регистру (все буквы маленькие) при помощи метода lower()
. Затем она превращается в список слов ['мало', 'средне', 'много']
при помощи split()
. Далее метод index находит в этом списке слово «средне» на позиции номер 1
.
Использование методов списков. Структура данных «Стек»
Приведем пример использования методов списков append и pop для моделирования структуры данных «Стек». Эта структура данных часто используется при решении различных задач (например, при вычислении выражений).
Представьте себе стопку сложенных футболок или любых других неодинаковых предметов, которые можно сложить в стопку. Из стопки удобно забрать самый верхний предмет — тот, который положили в нее последним. Если вы полностью разберете стопку, будете брать футболки в порядке, обратном тому, в котором их в нее клали.
Структура данных называется стек (stack, что и значит «стопка»). По-английски такую организацию данных называют LIFO — Last In First Out — Первым Пришел Последним Ушел!
Если пользоваться только методами append
и pop
без аргументов, список оказывается как раз такой стопкой.
Так, в примере ниже порядок вывода будет обратным порядку ввода:
Здесь использовалась конструкция while stack:
. В условии оператора if
или while
любой объект интерпретируется как bool
: либо как True
, либо как False
. В случае списков и строк в False
превращаются только []
и '' соответственно (а в случае чисел — только ноль).
Иными словами, можно было бы написать while bool(stack):
или while stack != []
: и получить тот же самый результат, но самый короткий и общепринятый вариант — просто while
stack:
.