Последовательности и цикл for
Операции над объектами как совокупность методов
- Поля объектов, пространство имён, dir(), поля-методы и поля-поля 
- Операции — это методы - int.__add__(100500,42) или даже (100500).__add__(42) как 100500+42 
- "строка".__len__() как len("строка") 
- и т. п.
 
- Понятие протокола - Пример: числовой протокол (на Си), на Python 
- Строгая типизация (__mul__() vs __rmul__()) и т. п. 
- Последовательность — это свойство объекта (нужные методы), т. е. тоже протокол
 
Цикл for
- Общий вид: - имена, а не только имя — распаковка, если элемент последовательности — тоже последовательность 
- break, continue 
- else: 
 
- примеры со строками и кортежами
- более подробно — в лекции про интераторы
Кстати,
- В конструкции множественного связывания имена = последовательность последовательность любая - расширенное множественное присваивание вида «A0, A1, …, *Аk, …, AN = последовательность_из_N+m_элементов» 
 
- Функции all() и any() принимают в качестве параметра последовательность 
- …одни повсюду!
Последовательности
Операции над последовательностями
- Имеют метод последовательность.__getitem__(что-то), что означает последовательность[что-то] 
Константные последовательности на примере кортежа
- Умножение на число и сложение
- in 
- индексирование, +от конца
- поэлементное сравнение
- секционирование: шаг, умолчания, отсутствие границ
- как на самом деле работает [] — .__getitem__() - тип slice 
 
- .__getitem__(кортеж) — не работает, а в других типах может) 
Cтрока (введение)
- Подстрока строки — строка   
Списки — модифицируемые последовательности
Имеют метод .__setitem__()
- .setitem(число) 
- .setitem(slice) - вариант с шагом
 
- циклическая cборка [выражение for имена in последовательность] - Что работает так:
- и даже [выражение for имена1 in последовательность1 for имена2 in последовательность2 …]: то есть является декартовым произведением
- Фильтрующая клауза: [выражение1 for имена in последовательность if выражение2] 
 
- Список как динамический массив, сложность модификации его начала (n) и конца (1) - список как стек, .append(), .pop() 
- сравнение с linked lists; есть ли разница в эффективности? - единственная выгода linked list — это константная сложность вставки/удаления произвольного элемента
- но алгоритмов, требующих вставки/удаления произвольного элемента без предварительного поиска, кажется (?) нет, а поиск в обоих случаях линейный 
 
 
- Ответ на предыдущий вопрос — очередь 
- from collectiond import deque 
- добавление в начало и в конец
Имитация многомерных структур данных
- списки списков: проблема внутренних размеров
Вычислимые последовательности
Значения не хранятся, а вычисляются .__getitem__()-ом
- range (индексируемая!) - «Классический» for i in range(N): 
- ещё есть sorted(), но оно возвращает список 
 
Д/З
- Прочитать и прощёлкать тьюториал (и про цикл for) 
- EJudge: UniInterval 'Объединение отрезков' Input:- Вводится кортеж пар натуральных чисел. Это координаты отрезков на прямой. Рассмотрим объединение этих отрезков и найдём длину этого объединения (т. е. совокупную длину всех «закрашенных» нашими отрезками отрезков на прямой). Output:- (66, 91), (152, 230), (21, 81), (323, 342), (158, 211), (286, 332), (294, 330), (18, 58), (183, 236) - 213 
- EJudge: SpiralDigits 'Цифры по спирали' Input:- Ввести целые M и N, вывести последовательность 0 1 2 3 4 5 6 7 8 9 0 1 2 3 … в виде спирально (по часовой стрелке, из верхнего левого угла) заполненной таблицы N×M (N строк, M столбцов). Не забываем про то, что M и N могут быть чётными, нечётными и неизвестно, какое больше. Output:- 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 
- При подготовке последнего теста использовался графический редактор GIMP и формат XPM   - EJudge: FindRect 'Морской бой' Input:- Ввести несколько строк одинаковой длины, состоящих из символов '#' и '.'. Первый и последний символ каждой строки — '.', а первая и последняя строки состоят целиком из '-'. Известно (проверять не надо), что на получившемся поле изображены только прямоугольники, причём они не соприкасаются даже углами. Вывести количество этих прямоугольников. Output:- ------------ .###.....#.. .###.##..#.. .....##..... .....##..#.. ............ ............ .####..####. .......####. .......####. ------------ - 6 
