Различия между версиями 16 и 17
Версия 16 от 2017-10-27 01:33:06
Размер: 3607
Редактор: ArsenyMaslennikov
Комментарий:
Версия 17 от 2017-11-13 11:11:12
Размер: 3609
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 58: Строка 58:

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

Разбор Д/З №3

Повторение

Функции: что это такое, задание, распаковка/запаковка параметров

Итераторы: next(), StopIteration, из чего делаются (.__iter__() и .__getitem()__)

Генераторы — вид итераторов — задание, принцип работы, что такое return

Ещё про генераторы

Выражение-генератор:

  • (<выражение> for <имена> in <последовательность>)

    • пример
  • (<выражение> for <имена> in <последовательность> if <выражение-фильтр>)

    • пример

Параметрический генератор:

  1. сначала next(генератор)

  2. все остальные — вида генератор.send(значение)

  3. соответственно, в тексте функции — имя = yield выражение

  4. пример

Зачем это может быть нужно?

Вся правда про []

  • индексирование — .__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

    Input:

    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
    3,4
    Output:

    [2, 3, 5, 6, 9, 11, 14, 15]
  • EJudge: LookSay 'Прочти это вслух'

    Написать генератор цифр последовательности Конвея «Look and Say». (Сама последовательность Конвея). Ввести N⩾0 и вывести N-ю цифру последовательности.

    Input:

    100500
    Output:

    2
  • EJudge: DodgsonDet 'Определитель'

    Ввести квадратную целочисленную матрицу построчно и посчитать её определитель (например, методом конденсации Доджсона). Размер матрицы (1<N<14) определяется длиной её нулевой строки.

    Input:

    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
    Output:

    2784
  • EJudge: SpiralDigits 'Цифры по спирали'

    Ввести целые M и N, вывести последовательность 0 1 2 3 4 5 6 7 8 9 0 1 2 3 … в виде спирально (по часовой стрелке, из верхнего левого угла) заполненной таблицы M×N. Не забываем про то, что M и N могут быть чётными, нечётными и неизвестно, какое больше.

    Input:

    6,5
    Output:

    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

LecturesCMC/PythonIntro2017/05_Lists (последним исправлял пользователь FrBrGeorge 2017-11-13 11:11:12)