Различия между версиями 3 и 4
Версия 3 от 2021-10-28 15:13:16
Размер: 3498
Редактор: FrBrGeorge
Комментарий:
Версия 4 от 2021-11-01 16:15:02
Размер: 3953
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 26: Строка 26:
  * написать генератор-функцию `slide(seq, n)`, которая получает на вход последовательность A,,0,,, A,,1,, … , A,,n,,, …, а на выходе выдаёт итератор A,,0,,, A,,1,, … , A,,n-1,,, ''A,,1,,, A,,2,, … A,,n,,'', A,,2,,, A,,3,, … A,,n+1,, и т. д.
  * Нам помогут `itertools.islice()` и `yield from`!
  * написать генератор-функцию `slide(seq, n)`, которая получает на вход последовательность A,,0,,, A,,1,, … , A,,n,,, …, а на выходе выдаёт итератор
    .
A,,0,,, A,,1,, … , A,,n-1,,,
    .
A,,1,,, A,,2,, … A,,n,,,
    .
A,,2,,, A,,3,, … A,,n+1,,
    . …
   и т. д., т. е. выдаёт содержимое «окна» длины не более `n`, сдвигает его на одну позицию, и снова выдаёт. Итерация заканчивается, когда окно оказывается пустым

  * Нам помогут `itertools.islice()`, `itertools.tee()` и `yield from`!
  * Пример:
  {{{#!python
print(*list(slide(range(5), 3)))
  }}}
  * Вывод:
  {{{
0 1 2 1 2 3 2 3 4 3 4 4
  }}}

10.07 Итераторы

Пример использования Zoom на семинарах ВМК

Итераторы

Просто итераторы

  • Циклический конструктор и его использование, зачем нужен
  • Функция-генератор и yield

  • <!> Задача_1, просто на итератор.

    • числа Фибоначчи - последовательность, начинающаяся с 1, 1, и продолжающаяся так, что очередной элемент равен сумме двух предшествующих элементов.
    • написать генератор-функцию fib(m, n), возвращающую итератор по числа Фибоначчи, начинаю с m-го и заканчивая n-м (m⩽n), в нумерации с 0

    • пример:
      • вход: 2, 4

      • выход: 2, 3, 5

Немного об itertools:

  • Удобство и простота
  • Особенности tee() и islice() и других воспроизводящих итераторов — чудес на свете не бывает

  • Комбинаторика

Зачем нужен yield from

  • Пример
  • <!> Задача_2, на yield from: Скользящее окно

    • написать генератор-функцию slide(seq, n), которая получает на вход последовательность A0, A1 … , An, …, а на выходе выдаёт итератор

      • A0, A1 … , An-1,

      • A1, A2 … An,

      • A2, A3 … An+1

      • и т. д., т. е. выдаёт содержимое «окна» длины не более n, сдвигает его на одну позицию, и снова выдаёт. Итерация заканчивается, когда окно оказывается пустым

    • Нам помогут itertools.islice(), itertools.tee() и yield from!

    • Пример:
         1 print(*list(slide(range(5), 3)))
      
    • Вывод:
      0 1 2 1 2 3 2 3 4 3 4 4
  • <!> Задача_3 — на itertools (на комбинаторику, с естественной формулировкой):

    • Священные Надписи

    • поклонники бога Тора используют в своих надписях три буквы: T, O, R. Надпись считается священной, если имя бога (подстрока "TOR") входит в неё ровно два раза
    • напишите программу-однострочник, которая при помощи itertools и filter формирует все священные надписи заданной длины, причём в алфавитном порядке
    • пример:
      • вход: 6

      • выход: TORTOR

      • вход: 7

      • выход: OTORTOR, RTORTOR, TOROTOR … и т.п.

Д/З

LecturesCMC/PythonIntro2021/Prac/07_Iterators (последним исправлял пользователь alryaz 2021-12-01 03:27:40)