Различия между версиями 5 и 6
Версия 5 от 2021-11-11 10:36:52
Размер: 3953
Редактор: hbd
Комментарий: Правка даты
Версия 6 от 2021-12-01 03:27:40
Размер: 4125
Редактор: alryaz
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:

{{{#!wiki note
Строка 8: Строка 10:
}}}
Строка 10: Строка 13:
Просто итераторы
===
Просто итераторы ===
Строка 19: Строка 23:
Немного об [[py3doc:itertools]]:
===
Немного об `itertools` ===
 *
[[py3doc:itertools]]
Строка 22: Строка 28:
 * Комбинаторика
Зачем нужен `yield from`
 * Комбинаторика-+

===
Зачем нужен `yield from` ===
Строка 25: Строка 32:
 * <!> Задача_2, на `yield from`: Скользящее окно  * <!> '''Задача_2: Скользящее окно''' (на `yield from`)
Строка 41: Строка 48:
 * <!> Задача_3 — на [[py3doc:itertools]] (на комбинаторику, с естественной формулировкой):
    '''Священные Надписи'''
  
* поклонники бога Тора используют в своих надписях три буквы: T, O, R. Надпись считается священной, если имя бога (подстрока "TOR") входит в неё ровно два раза

* <!> '''Задача_3: Священные надписи''' ([[py3doc:itertools]]; на комбинаторику, с естественной формулировкой):
  * поклонники бога Тора используют в своих надписях три буквы: '''T''', '''O''', '''R'''. Надпись считается священной, если имя бога (подстрока ''"TOR"'') входит в неё ровно два раза
Строка 45: Строка 52:
  * пример:
   * вход: `6`
   * выход: `TORTOR`
   * вход: `7`
   * выход: `OTORTOR`, `RTORTOR`, `TOROTOR` … и т.п.

  '''Input (1):'''
  {{{
6
}}}

  '''Output (1):'''
  {{{
TORTOR
}}}

  '''Input (2):'''
  {{{
7
}}}
  '''Output (2):'''
  {{{
OTORTOR, RTORTOR, TOROTOR, TORRTOR, TORTORO, TORTORR, TORTORT, TORTTOR, TTORTOR
}}}

10.28 Итераторы

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

Итераторы

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

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

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

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

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

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

Немного об `itertools`

  • 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 формирует все священные надписи заданной длины, причём в алфавитном порядке

      Input (1):

      6

      Output (1):

      TORTOR

      Input (2):

      7

      Output (2):

      OTORTOR, RTORTOR, TOROTOR, TORRTOR, TORTORO, TORTORR, TORTORT, TORTTOR, TTORTOR

Д/З

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