pyth_03_list
Заметка 3. Список
курса Математический практикум по Питону.
Шокуров Антон В.
shokurov.anton.v@yandex.ru
http://машинноезрение.рф
Версия 0.22

Аннотация

Вводится базовый объект Питона (Python) список (list). Показано как его создавать, проверять принадлежность элемента, обращаться к отдельным элементам (сложные индексы), и искать индекс элементов. Рассказано про цикл while и цикл for применительно к спискам и о важной их составляющей else.

Ключевые слова: list, in, len, type, index while, for и else.

Это предварительная версия! Любые замечания приветствуются.

Список -- основной объект питона!

Вычисления над отдельными числами это хорошо, но нам понадобиться список, например, чисел. Списки нужны хотябы для того, чтобы хранить наши данные (котировки акций, список товаров и тому подобное). Список позволяет хранить несколько значений, в общем случае, разных типов как если бы они были разными перемеными. Главное, что список подддерживает добавление новых элементов (в его конец), а также извлечение и удаление подсписков.

Список

Создание

Создаем список из 6 элементов.

В момент создания список конечно же можно проинициализировать выражениями.

Чтобы были понятны принципы работы с ним, нужно его все-таки присвоить переменной.

Выведем элементы списка.

Определим количество элементов в списке

Через явное преобразование.

По аналогии для строчки.

Проверка на принадлежность списку

Очевидно, важно иметь возможность проверки принадлежности элемента списку. Делается это так.

При этом выполняются нужные преобразования типа.

Соответственно применительно в ветвлению.

упр. Сформировать список корней квадратного уравнения.

Пронумерованные переменные

Индекс

К списку можно относится как проиндексированныйм (пронумерованным) переменным.

Число в квадратных скобках указывает на индекс в списке.

Подумаем над данной записью:

Индекс должен соответствовать существующему элементу списка.

Раз нумерация индекса начинается с нуля, а количество элементов 6, то последний валидный индекс равен 5.

В общем случае через оператор len

Тип элементов списка

Список и тип элементов

Тип у разных элементов списка может быть разным.

Разнородные элементы

В заключении обсуждения списков отмечу, что их элементы не обязаны иметь один и тот же тип

Последнее показывает, что списки могут соедржать совершенно разнородные объекты. В этом смысле они полноценные.

Поэтому, естественно, что списки могут содержать списки.

Для других элементов это не прокатит

Можно конечно проверить принадлежность списку более сложных объектов.

Присвоение

Значение

Можно присловить другое значение элементу списка.

Отсылка к проиндексированным переменным.

Упражнение: Заполнить список первыми n простыми числами. n Вводится.

Для вложенных списков

Рекурсия из списков

Сложный индекс

От и до

Можно указывать диапазон индексов: от и до.

При задании интервала индексов диапазон может выходить за пределы списка.

Можно оба числа опустить:

Явный вид указания последнего индекса, который не включительный.

Итого, если не указывать явно одну из границ диапазона индексов, то индексы берутся по максимуму.

Вложенность индексаций

Для упрощения понимания воспользуемся переменной

Как мы видим, срез списка по сложному индексу является списком.

Вот его элементы

Можем повторить срез для этого нового списка.

Не путать с вложенностью списков!

Присвоение сразу нескольким элементам списка

На самом деле происходит замена выбранной части списка на элементы другого списка. Поэтому если взять элементов больше отмеченном диапазоне, то список расширится.

Шаг индекса

В расширенном варианте можно указать шаг увеличения индекса.

Отрицательные параметры

Отрицательный индекс

Казалось бы что будет если взять отрицательный индекс? Мы же выйдем за границу...

Отмечу, что элементы списка можно нумеровать и с конца. Для этого используются отрицательные индексы.

Чтобы пронумеровать с конца сложим отрицательный индекс с длиной списка.

Но все-таки всему есть предел...и отрицательным индексам тоже.

Выходим за диапазон, если после прибавления длины списка получившиеся число по-прежнему отрицательное.

А это допустимо.

Такие элементы также можно использовать при задании диапазона индексов.

Отрицательный шаг

Шаг тоже может быть отрицательный.

Но можно же шаг взять отрицательным.

Упр. Как переставить в обратном порядке элементы списка с четным индексом? На нечетных останутся неизменными. Пример: [23, 23, 4, -7, 4, 11]

Поиск

Встроенный метод

Напомним элементы списка.

Возьмем отсутствующий в списке элемент

Вызовет ошибку поиска.

т.е. не надо искать в списке индекс того чего там нет.

Можно указать и диапазон для поиска элемента

Вручную

Тот же цикл для отсутствующего элемента

Чтобы не было ошибки:

Добавив доп условие цикл усложнился. И это еще else к циклу не добавлен... Лучше такую конструкцию со списками не использовать.

Цикл for

Со списками лучше использовать цикл for, а не while. Для них есть специальный вариант под обход списка.

Найдем 2 элемент равный need

Не список, но похож

С объектом строка мы уже ранее встречались. В данной заметки будут показаны дополнительные с ней взаимодействия.

Индексация

Индекс работает также как и для списка, list. Не будем подробно останавливаться. Строка текста тоже на самом деле может быть проиндексирована, т.е. можно считать букву по индексу.

Поэтому, как и для списков можно опять взять сложный индекс.

Но есть и существенные отличия. Например, строка неизменяемый объект, константный.

Но присвоить новое значение нельзя.

Поиск</2>

Разница между find и index.

Извлекаем время. Пользуемся тем, что сначала идет время начальное, а потом конечное.

Покажем практический пример применения при скачивании файлов.

Преобразование строки

Чистка пробелов

Сама строка не меняется.

Упражнение. Примени чистку пробелов для чистки введенного имени пользователя. Выведите что-то о нем чтобы было видно что пробелу удалены.

Разбиение на подстроки и объединение

Иногда бывает нужным разбить строчку по пробелам.

Возвращается как раз список.

На самом деле можно и по другому символу разбить строку.

А бывает, что нужно наоборот объеденить список строк. Между объединяемыми строками будем вставлена нужная строка.

Объедим список строчек посредством строки.

Кодировки