Основы Python — кратко. Часть 3. Списки, кортежи, файлы.
Также следует заметить что это это, видимо, последний «простой урок», дальше я постараюсь углубиться во все аспекты программирования, которые мы прошли «по верхам» и продолжить более детально.
В общем, те кому не интересно — читают следующую новость, а остальных — прошу пройти .
Python для начинающих. Глава третья. «List, tuple, etc.»
Кортежи. Кортежи (англ. tuple) используется для представления неизменяемой последовательности разнородных объектов. Они обычно записываются в круглых скобках, но если неоднозначности не возникает, то скобки можно опустить.
Как видно из примера, кортеж может быть использован и в левой части оператора присваивания. Значения из кортежа в левой части оператора присваивания связываются с аналогичными элементами правой части. Этот факт как раз и дает нам такие замечательные возможности как массовая инициализация переменных и возврат множества значений из функции одновременно. Последний пример демонстрирует создание кортежа из одного элмента (его часто называют синглтоном).
Списки
В Пайтоне отсутствуют массивы в традиционном понимании этого термина. Вместо них для хранения однородных (и не только) объектов используются списки. Они задаются тремя способами.
Преобразуем строку в список
Создание с помощью списковых включений. В данном случае мы берем кубы всех нечетных чисел от 0 до 19. Этому синтаксису я планирую посвятить отдельное занятие.
Для работы со списками определен ряд операторов и функций: len(s) Длина последовательности s x in s Проверка принадлежности элемента последовательности. В новых версиях Python можно проверять принадлежность подстроки строке. Возвращает True или False x not in s = not x in s s + s1 Конкатенация последовательностей s*n или n*s Последовательность из n раз повторенной s. Если n < 0, возвращается пустая последовательность. s[i] Возвращает i-й элемент s или len(s)+i-й, если i < 0 s[i:j:d] Срез из последовательности s от i до j с шагом d будет рассматриваться ниже min(s) Наименьший элемент s max(s) Наибольший элемент s s[i] = x i-й элемент списка s заменяется на x s[i:j:d] = t Срез от i до j (с шагом d) заменяется на (список) t del s[i:j:d] Удаление элементов среза из последовательности
Кроме того, для списков определен ряд методов. append(x) Добавляет элемент в конец последовательности count(x) Считает количество элементов, равных x extend(s) Добавляет к концу последовательности последовательность s index(x) Возвращает наименьшее i, такое, что s[i] == x. Возбуждает исключение ValueError, если x не найден в s insert(i, x) Вставляет элемент x в i-й промежуток pop(i) Возвращает i-й элемент, удаляя его из последовательности reverse() Меняет порядок элементов s на обратный sort([cmpfunc]) Сортирует элементы s. Может быть указана своя функция сравнения cmpfunc
Для преобразования кортежа в список есть функция list, для обратной операции — tuple.
Об индексировании списков и выделении подпоследовательностей следует еще раз упомянуть отдельно (этот механизм работает аналогично и для строк). Для получения элемента используются квадратные скобки, в которых находится индекс элемента. Элементы нумеруются с нуля. Отрицательное значение индекса указывает на элементы с конца. Первый с конца списка (строки) элемент имеет индекс -1.
Сложнее обстоят дела со срезами. Для получения срезов последовательности в Пайтоне принято указывать не номера элементов, а номера «промежутков» между ними. Перед первым элементом последовательности промежуток имеет индекс 0, перед вторым – 1 и так далее. Отрицательные значения отсчитывают элементы с конца строки. В общем виде срез записывается в следующем виде: список[начало: конец: шаг] По умолчанию начало среза равно 0, конец среза равен len(список), шаг равен 1. Если шаг не указывается, второй символ «:» можно опустить. С помощью среза можно указать подмножество для вставки списка в другой список, даже при нулевой длине. Это удобно для вставки списка в строго определенной позиции.
Словари
Словарь (хэш, предопределенный массив) – изменяемая структура данных, предназначенная для хранения элементов вида ключ: значение. Все легко показывается на примере.
Тип file
Объекты этого типа предназначены для работы с внешними данными. Чаще всего данному объекту соответствует файл на диске, но это далеко не всегда так. Файловые объекты должны поддерживать основные методы: read(), write(), readline(), readlines(), seek(), tell(), close() и т.п.
Следующий пример показывает копирование файла:
(этот пример можно записать массой других способов, многие из которых сильно отличаются по оптимальности, но это тоже тема отдельного разговора)
В принципе, большинству функций абсолютно безразлично, передан им объект типа файл, или любой другой объект с такими же методами. Так, приведенный выше пример можно очень легко модифицировать для скачивания файла из Интерне, заменив в нем первую строку на следующий код.