Параметрически генераторы и списки

Выражение-генератор — выражение в круглых скобках, которое создает на каждой итерации новый элемент по правилам.

1.png

Вместо имени – выражение-генератор.

2.png

Выражение-генератор помогает нам в случае, если мы не хотим испортить пространство имен непонятными именами.

3.png

После for можно поставить фильтр

i % 3 != 1

4.png

if – это цикл конструктора, а не условное выражение. Можно написать так…

5.png

Здесь наблюдаем операцию декартового произведения. Но можно использовать конструкцию проще.

6.png

Еще более сложная вещь – это параметр генератора. Когда пишем генератор-функцию , yield четко определено.

7.png

Перепишем это в таком виде.

8.png

Теперь будем передавать значения.

9.png

Второе значение передать можем, а первое нет.

10.png

Это похоже на каноническую схему цикла. (Подсказка для ДЗ)

Списки

Немного магии…

11.png

Это две одинаковые операции.

Создадим класс. В нем будет метод getitem.

12.png

Если написать c[100500]

13.png

Вылез сам объект "c" и 100500. Если написать так, то это будет вызов того же getitem, только передается slice object. Он просто содержит 3 числа.

14.png

Посмотрим на dir(s)

15.png

Если напишем

s = slice(2,4,100 500) 

то 100 500 – это шаг. Списки в Python3 модифицируемые. Они же и являются массивами. В них содержится все, что угодно.

16.png

Список можно сгенерировать циклическим конструктором.

17.png

Превратим range(20,50,3) в список.

18.png

Можно вставлять экземпляр в последовательность. Посмотрим, как работают методы insert и del.

19.png

Метод index.

20.png

Стоит заметить, что это две эквивалентные записи поиска элемента последовательности.

l.index(41)
41 in l

Напомним, что список – это массив, так как операции линейные. Но есть 2 случая операции вставки и удаления, имеющих константную сложность. Это вставка и удаление в конец списка.

21.png

Модели append и pop напоминают стек.

Модуль collections

collections.deque - создаёт очередь из итерируемого объекта с максимальной длиной maxlen. Очереди очень похожи на списки, за исключением того, что добавлять и удалять элементы можно либо справа, либо слева.

Вернемся к свойствам.

Можем взять секцию…

22.png

Когда последовательность с шагом, то количество элементов нужно соблюдать. Иначе будет ошибка.

23.png

Напоминание: список – это модифицируемый объект. Когда мы что-то меняем (даже кардинально), то его идентификатор не меняется.

24.png

Метод copy возвращает точную копию объекта, но это 2 разных объекта.

25.png

LecturesCMC/PythonIntro2017/05_Lists/Conspect (последним исправлял пользователь AslanAshabokov 2017-12-29 12:07:55)