Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Списки, продолжение. (приложение к уроку 12)

Оглавление

Доброго времени суток, читатели, зрители моего канала 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 #языки программирования