Найти в Дзене
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() список остается тот же, но пустой. Тогда ка
Оглавление

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