Методы последовательностей#
Все последовательности делятся на две группы: изменяемые и неизменяемые. В зависимости от того, к какой группе относится последовательность, она будет иметь разный набор методов. Только небольшое количество методов будут общие.
Общие методы#
index- найти первое вхождение элемента
s = [4, 8, 15, 16, 23, 42]
s.index(42)
5
s = [42, 23, 8, 15, 42, 16, 23, 42]
# С помощью второго параметра можно указать с какого индекса должен начинаться поиск
s.index(42, 4, 8)
# С помощью третьего параметра можно ограничить зону для поиска, выставив максимальный индекс
s.index(42, 4, 8)
4
count- подсчитать количество вхождений элемента в последовательность
s = [42, 23, 8, 15, 42, 16, 23, 42]
s.count(42)
3
Отметим, что оба указанных методов работают как для последовательностей, так и для строк.
Методы неизменяемых последовательностей#
Кортежи и диапазоны обладают несколько различным набором специальных методов, которые мы не вызываем напрямую, но которые используются при выполнении привычных нам операций, например, арифметических (для ознакомления с этими методами можно вызвать функцию help). По части методов, которые предназначены для прямого использования пользователем, в неизменяемых последовательностях реализованы только рассмотренные count и index.
help(list)
help(range)
Методы изменяемых последовательностей#
append- добавляет элемент в конец последовательности
s = [4, 8, 15, 16, 23]
s.append(42)
s
[4, 8, 15, 16, 23, 42]
clear- очищает последовательность
s = [4, 8, 15, 16, 23]
s.clear()
s
[]
copy- возвращает копию последовательности: новый объект, содержащий точно такие же ссылки на объекты, как было в исходной последовательности
s = [4, 8, 15, 16, 23]
# Во время копирования мы создаем новую переменную, которая указывает на новый список
new_s = s.copy()
id(s), id(new_s)
(140544487339136, 140544487344384)
s = [4, 8, 15, 16, 23]
# Во время присваивания мы создаем новую переменную, которая указывает на тот же список
new_s = s
id(s), id(new_s)
(140544487336768, 140544487336768)
extend- принимает на вход последовательность и каждый элемент из неё добавляет по отдельности в исходную последовательность
s = [4, 8, 15, 16, 23]
s.extend([42, 52])
s
[4, 8, 15, 16, 23, 42, 52]
insert- принимает на индекс и значение, индекс указывает, на какое место должно быть вставлено значение, элементы исходной последовательности, начиная с этого индекса, сдвигаются на один направо
s = [4, 8, 15, 16, 23]
s.insert(0, 42)
s
[42, 4, 8, 15, 16, 23]
pop- извлекает из последовательности и возвращает элемент по указанному индексу. Элементы следующие за этим индексом сдвигаются на один налево
s = [4, 8, 15, 16, 23]
v = s.pop(2)
s, v
([4, 8, 16, 23], 15)
pop- удаляет из последовательности первый встречающийся элемент равный указанному значению. Элементы, следующие за удаленным, сдвигаются на один налево
s = [4, 8, 15, 16, 23]
s.remove(15)
s
[4, 8, 16, 23]
s = [4, 8, 15, 15, 16, 23]
s.remove(15)
s
[4, 8, 15, 16, 23]
reverse- меняет порядок последовательности на обратный. Изменяет текущую последовательность
s = [4, 8, 15, 16, 23]
print(id(s))
s.reverse()
print(id(s)) # объект остался тем же
s
140544487343040
140544487343040
[23, 16, 15, 8, 4]
s = [4, 8, 15, 16, 23]
print(id(s))
s = s[::-1] # срез создает новый объект
print(id(s))
s
140544487510976
140544487344256
[23, 16, 15, 8, 4]
sort- сортирует последовательность по возрастанию ее элементов
s = [8, 42, 15, 16, 4, 23]
s.sort()
s
[4, 8, 15, 16, 23, 42]
s = [8, 42, 15, 16, 4, 23]
# С помощью reverse можно задать сортировку по убыванию
s.sort(reverse=True)
s
[42, 23, 16, 15, 8, 4]
def is_even(n):
return n % 2 == 0
s = [8, 42, 15, 16, 4, 23]
# В key можно передать функцию, её результат будет использоваться вместо самих значений при сортировке
s.sort(key=is_even, reverse=True)
s
[8, 42, 16, 4, 15, 23]