Доброго времени суток, читатели, зрители моего канала programmer's notes.
Данная статья это приложение к уроку 12.
Списки. Методы списков
Методы
Доброе время суток. В Python для списков есть не плохой набор инструментов. Это набор методов и, конечно, срезы. Срезам будет посвящен 13-й видео-урок. Здесь же текстовое дополнение к 12-му уроку по спискам в Python.
И так рассмотрим методы объекта список.
1. append() - добавляет элемента в конец списка. Поскольку список может содержать элементы разных типов, то и тип аргумента данного метода может быть произвольным.
ls = []
ls.append(3)
ls.append('qwerty')
ls.append([1, 2, 3])
ls.append(120.3213)
print(*ls, sep='\n')
Результат выполнения фрагмента
3
qwerty
[1, 2, 3]
120.3213
Разумеется, можно добавлять элементы списка в цикле, например с клавиатуры, что я уже не раз демонстрировал.
2. clear() - очищает список. Другими словами удаляет все элементы списка. Т.е. после выполнения ls.clear() список остается тот же, но пустой. Тогда как если вы записали ls = [] или ls = list(), то создается новый пустой список. Почувствуйте разницу. Вы спросите: а что случится со старым списком? Его удалит специальная подсистема python - сборщик мусора.
3. copy() - создание нового списка, точной копии данного. В видеоуроке я говорил об этом методе. ls1 = ls.copy() и мы получаем новый список ls1 - точную копию списка ls. Аналогичный результат достигается ls1 = ls[:]. Но, если ls1 = ls, то нового списка не создается. ls и ls1 указывают на один и тот список.
См. также
4. count() - возвращает количество указанных элементов в списке.
ls = [2, 'qwe', 'qwe', 3, 'er', 10, 'qwe']
print(ls.count('qwe'))
Результат выполнения фрагмента
3
Чтобы узнать, имеется ли элемент в списке можно использовать оператор in или метод count().
Результат выполнения программы
Есть
Есть
5. extend() - добавляет в конец списка элементы другого списка.
ls = [1, 2, 3, 4]
ls1 = ['Один', 'Два']
ls.extend(ls1)
print(*ls)
Результат выполнения фрагмента
1 2 3 4 Один Два
Того же результата можно добиться с помощью оператора +
ls = ls + ls1
или
ls += ls1
В чем же разница?
Разница есть, но в большинстве случаев можно о ней забыть.
Во-первых, в скорости выполнения. Честно говоря не помню, что быстрее. А какая разница, если только ваша программа не выполняет десятки тысяч таких операций.
Во-вторых, оказывается есть ситуации (их не много), когда оператор + будет давать ошибку и единственный способ добавить к списку список будет extend(). Но о таких нюансах будем говорить еще не скоро. На самом деле программисты чаще всего доходят до этого чисто экспериментально и таких деталей не запоминают.
6. index() - осуществляет поиск элемента и возвращает его индекс. Если элементов несколько - возвращает первый по списку.
Имеет следующие формы
ls.index(el) - осуществляет поиска с первого элемента до последнего.
ls.index(el, bg) - осуществляет поиск с элемента с индексом bg и до последнего.
ls.index(el, bg, en) - осуществляет поиск с элемента с индексом bg до элемента с индексом en.
Есть одна важная особенность!!! Если элемент не найден, то генерируется исключение, которое можно перехватить с помощью операторов try - except. Чтобы избежать использования этого механизма, можно в начале определить, сколько раз встречается данный элемент в списке.
Ниже представлен пример поиска элементов списка равных данному.
Результат выполнения
1
3
6
9
7. insert() - осуществляет вставку элемента в указанное место списка. Метод имеет два аргумента - ls.insert(i, el). Первый аргумент - индекс, куда вставлять, второй - сам элемент. При этом часть списка начиная с элемента с индексом i вправо.
ls = [1, 2, 2, 1, 2, 10, 100, 2, 102, 3, 2]
ls.insert(1, 100)
print(*ls)
Результат выполнения фрагмента
1 100 2 2 1 2 10 100 2 102 3 2
Если индекс выходит за границу списка, то элемент просто добавляется справа в список.
8. remove() - удаляет в списке первый по порядку указанный элемент.
ls = [1, 2, 2, 1, 2, 10, 100, 2, 102, 3, 2]
ls.remove(2)
print(ls)
Результат
[1, 2, 1, 2, 10, 100, 2, 102, 3, 2]
Важно!!! Если элемента такого нет, то генерируется исключение, которое можно перехватить с помощью try - except. Если мы хотим обойтись без такой обработки, то предварительно можно узнать о наличие такого элемента в списке (см. primer19.py).
Следующий фрагмент удаляет се двойки из списка
Результат
1 1 10 100 102 3
9. reverse() - меняет порядок следования элементов списка на противоположный.
ls = [1, 2, 2, 1, 2, 10, 100, 2, 102, 3, 2]
ls.reverse()
print(ls)
Результат выполнения
[2, 3, 102, 2, 100, 10, 2, 1, 2, 2, 1]
10. pop() - удаляет элемент с указанным индексом и возвращает этот элемент. Если индекс не указывать, то он полагается индексу последнего элемента (len(ls) - 1).
ls = [1, 2, 2, 1, 2, 10, 100, 2, 102, 3, 2]
print(ls)
el = ls.pop(4)
print(el)
print(ls)
Результат выполнения
[1, 2, 2, 1, 2, 10, 100, 2, 102, 3, 2]
2
[1, 2, 2, 1, 10, 100, 2, 102, 3, 2]
Следует отметить, что указывать можно только индекс реально существующего элемента списка, в противном случае возникнет ошибка.
Заметим, что методы append() и pop() позволяют из списка легко (легким движением руки) создать стек. Запомним это на будущее.
11. sort() - сортировка списка. В видеоуроке я демонстрировал этот метод, а также функцию sorted().
ls = [1, 2, 2, 1, 2, 10, 100, 2, 102, 3, 2]
ls1 = sorted(ls)
print(ls1)
ls1.sort(reverse=True)
print(ls1)
Результат выполнения фрагмента
[1, 1, 2, 2, 2, 2, 2, 3, 10, 100, 102]
[102, 100, 10, 3, 2, 2, 2, 2, 2, 1, 1]
Функция sorted() и метод sort() имеют еще один параметр, называемый ключом сортировки. Мы вернемся к этому вопросу несколько позднее, сейчас не буду перегружать ваш мозг.
Не много о том, в чем собственно разница между sort() и sorted(). sorted() всегда создает новый список, даже если мы напишем ls = sorted(ls). Следовательно теоретически sorted() выполняется несколько медленнее sort(). С другой стороны sort() сортирует только конкретный список, а sorted() может применять к другим объектам.
Сравнение и приведение к логическому типу
Повторю также материал, изложенный в видеоуроке.
Списки можно сравнивать. Два списка равны, если их элементы совпадают и по значению и по порядку следования.
ls = [1, 2, 3]
ls1 = [2, 1, 3]
Эти два списка не равны, хотя они состоят из одинаковых элементов. Чтобы узнать, не совпадают ли списки по их содержанию, их придется отсортировать.
И наконец последнее. Переменные типа список приводятся к логическому типу. Пустой список приводится к False в остальных случаях получаем True.
ls = [1, 2, 3]
print(bool(ls))
ls = []
print(bool(ls))
Результат выполнения
True
False
Соответственно список можно использовать в условных конструкциях типа if ls: или while ls: .
Результат выполнения программы
2
3
102
2
100
10
2
1
2
2
1
Оператор del
В языке python существует оператор del. Он универсален. С помощью него можно удалять целые переменные. Т.е. если ls список, то команда del ls удалит весь список. Это относится к переменным любого типа. Но с помощью del можно удалять и элементы списка, если вы знаете их индексы.
ls = [1, 2, 2, 1, 2, 10, 100, 2, 102, 3, 2]
print(*ls)
del ls[0], ls[1]
print(*ls)
Результат выполнения фрагмента
1 2 2 1 2 10 100 2 102 3 2
2 1 2 10 100 2 102 3 2
Замечание
Программное удаление переменных чаще всего не требуется, поскольку интерпретатор Python содержит механизм сборки мусора. Этот механизм работает параллельно с выполнением программы и удаляют не нужные уже переменные (объекты) из памяти.
Глобальные функции
Как я уже неоднократно упоминал, в Python используются глобальные функции. Как правило, это функции универсального характера. Применительно к спискам я уже упомянул две: len() - длина списка, sorted() - создание отсортированного списка из данного. Следует указать на еще две удобные функции, применимые к спискам, состоящим из чисел: min() - получить минимальный элемент, max() - получить максимальный элемент.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.
#программирование #программисты #python #языки программирования