Хранениe и модификация набора произвольных данных
Повторение:
- Последовательность
Можно перебрать циклом for
- (часто) можно индексировать
- (часто) можно брать секции
Все наши последовательности были неизменяемые.
Для того, чтобы из кортежа (1, 3, 5, 7, 9, 11) получить кортеж (1, 3, 5, 100500, 9, 11), надо проделать довольно много операций:
сколько и каких?
сколько новых объектов при этом создаётся
- То же для строк
Изменяемые последовательности
Что хочется:
- Хранить произвольные объекты
- Иметь доступ к ним по номеру (индексу) и получать подпоследовательности (секции)
+ Менять один объект на другой
+ Добавлять объекты и удалять их оттуда
+ Добавлять, удалять и менять целые секции
Тип данных — list («список»).
Задание списка: [объект, объект, …]
/ Повторение:
- сложение и умножение списков как последовательностей,
- индексация и секционирование
Связывание произвольного объекта с помощью список[индекс] = объект
Повторение: чем отличаются левая часть «=» и правая (справа — выражения, слева имена)
Почему связывание — это не присваивание
Из списка [1, 3, 5, 7, 9, 11] получить список [1, 3, 5, 100500, 9, 11].
Это тот же список!
Добавление объекта в конец списка .append() и снятие его оттуда .pop(); использовать или не использовать значение .pop()
Вводить элементы до 0; если они положительные — добавлять в список, если отрицательные — удалять последний элемент списка. В конце вывести список.
Вставка и удаление произвольного элемента — del список[индекс], .insert()
Написать программу: вводится N, а затем проводится два эксперимента:
- Заводится пустой список
N раз добавляется элемент в список, удаляется, и добавляется снова
- Выводится сообщение
- Заводится ещё один пустой список
N раз вставляется элемент в начало нового списка, удаляется оттуда, и добавляется снова
- Выводится сообщение
Какая часть работает быстрее?
Немного о том, что списки — это массивы: некоторые операции работают сразу, а вот эти требуют обшарить/перестроить весь массив
del, .insert()
.remove() и in
Замена, вставка и удаление секций
Поменять местами первую и вторую половину списка
подсказка 1: нельзя сделать a = a[полдлины:] + a[:полдлины] — это будет как с кортежами, новый список
подсказка 2: a, b = b, a
Ещё методы списка (.index(), .count(), .copy(), .sort() / sorted(список)¸…)
Если успеем: упорядочивание элементов в массиве, простой вариант с выбором минимума
Д/З
День отдыха закончился ☹.
Отщёлкать седьмое занятие учебника и решить все задачи (да, 16 штук)
Скопировать решения в соответствующие файлы и проверить, что они всё ещё работают!
Имена файлов — от prog_7_1.py до prog_7_16.py
Прислать эти 16 файлов в виде шестнадцати приложений к одному письму по адресу <uneexlectures AT cs DOT msu DOT ru>
В поле Subject должно быть «слово» PhilosoPython2022 (другие слова тоже можно ☺)