Параметрические генераторы и списки
Разбор Д/З №3
Повторение
Функции: что это такое, задание, распаковка/запаковка параметров
Итераторы: next(), StopIteration, из чего делаются (.__iter__() и .__getitem()__)
Генераторы — вид итераторов — задание, принцип работы, что такое return
Ещё про генераторы
Выражение-генератор:
(<выражение> for <имена> in <последовательность>)
- пример
(<выражение> for <имена> in <последовательность> if <выражение-фильтр>)
- пример
Параметрический генератор:
сначала next(генератор)
все остальные — вида генератор.send(значение)
соответственно, в тексте функции — имя = yield выражение
- пример
Зачем это может быть нужно?
Вся правда про []
индексирование — .__getitem__(…)
а сечения [:]?
а всякое [,]?
Всё это — вызов __getitem__(…) с соответствующими параметрами. Например, M[a:b:c] превращается в A.__getitem__(slice(a,b,c)). При этом slice(a,b,c) — это просто объект, имеющий поля .start (==a), .stop (==b) и .step (==c); поле равно None если он не задано в конструкции с «[»
Пример с классом
Списки
Задание [ , , , ]
- циклический конструктор:
[<выражение> for <имена> in <последовательность> if <выражение-фильтр>]
- циклический конструктор:
- Все свойства кортежей
- индексиварние
- секционирование
- …
- Левая часть операции связывания
A[i] =
A[i:j] = последовательность
A[i:j:k] =
- Вставка и удаление таким способом
- Списки — это массивы
NB! то, что слева — не последовательности вообще
__setitem()__?
Методы списков
- обзор
Стек с помощью append()/pop()
быстрый append()/pop(), медленный insert()/del и remove()/index()
Д/З
Внимание!: более подробное объяснение условий и некоторые подсказки можно найти по ссылкам «полное условие»`
- Прочитать
о списках в учебнике,
о различных последовательностях в справочнике
- Придумать пример использования параметрического генератора
EJudge: FilterList 'Отфильтрованный список'
Ввести кортеж целых чисел, затем два натуральных числа M и N, и вывести список из элементов, (1) не стоящих на местах, кратных M, и (2) при этом не кратных N
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 3,4
[2, 3, 5, 6, 9, 11, 14, 15]
EJudge: LookSay 'Прочти это вслух'
Написать генератор цифр последовательности Конвея «Look and Say». (Сама последовательность Конвея). Ввести N⩾0 и вывести N-ю цифру последовательности.
100500
2
EJudge: DodgsonDet 'Определитель'
Ввести квадратную целочисленную матрицу построчно и посчитать её определитель (например, методом конденсации Доджсона). Размер матрицы (1<N<14) определяется длиной её нулевой строки.
8, 8, 5, 6, 3 1, 4, 4, 9, 0 9, 6, 7, 7, 3 4, 1, 0, 1, 4 6, 7, 9, 7, 3
2784
EJudge: SpiralDigits 'Цифры по спирали'
Ввести целые M и N, вывести последовательность 0 1 2 3 4 5 6 7 8 9 0 1 2 3 … в виде спирально (по часовой стрелке, из верхнего левого угла) заполненной таблицы M×N. Не забываем про то, что M и N могут быть чётными, нечётными и неизвестно, какое больше.
6,5
0 1 2 3 4 5 7 8 9 0 1 6 6 7 8 9 2 7 5 6 5 4 3 8 4 3 2 1 0 9