Наоми Седер - Python. Экспресс-курс
- Название:Python. Экспресс-курс
- Автор:
- Жанр:
- Издательство:Питер
- Год:2019
- ISBN:978-5-4461-0908-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Наоми Седер - Python. Экспресс-курс краткое содержание
Наоми Седер рассказывает не только об основных особенностях языка Python, но и его объектно-ориентированных возможностях, которые появились в Python 3. Данное издание учитывает все изменения, которые произошли с языком за последние 5 лет, а последние 5 глав рассказывают о работе с большими данными.
Python. Экспресс-курс - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
5.5.2. Конкатенация списков оператором +Чтобы создать список слиянием двух существующих списков, используйте опе-ратор + (оператор конкатенации списков), который оставляет исходные списки-аргументы без изменений:
>>> z = [1, 2, 3] + [4, 5]
>>> z
[1, 2, 3, 4, 5]
5.5.3. Инициализация списков оператором *Оператор * создает список заданного размера, инициализированный заданным значением. Эта операция типична для больших списков, размер которых известен заранее. И хотя вы можете использовать append для добавления элементов и ав-томатического расширения списка по мере необходимости, эффективнее будет использовать * для определения правильного размера списка в начале работы про-граммы. Если размер списка остается неизменным, это позволяет избежать затрат на перемещение данных в памяти:
>>> z = [None] * 4
>>> z
[None, None, None, None]
При таком использовании списков оператор * (который в данном контексте на-зывается оператором умножения списков ) повторяет список заданное количество раз и объединяет все копии для формирования нового списка. Это стандартный способ опережающего определения списков заданного размера в языке Python. В умножении списков часто используется список, содержащий один экземпляр None , но содержимое списка может быть любым:
>>> z = [3, 1] * 2
>>> z
[3, 1, 3, 1]
5.5.4. Получение наименьшего или наибольшего элемента функциями min и max
Функции min и max используются для нахождения наименьшего и наибольшего элемента в списке. Вероятно, чаще всего вы будете использовать функции min и max с числовыми списками, но они могут применяться к спискам, содержащим элементы любых типов. Попытка определить наименьший или наибольший объ-ект в множестве объектов разных типов приведет к ошибке, если сравнение этих типов не имеет смысла:
>>> min([3, 7, 0, -2, 11])
-2
>>> max([4, "Hello", [1, 2]])
Traceback (most recent call last):
File "", line 1, in
max([4, "Hello",[1, 2]])
TypeError: '>' not supported between instances of 'str' and 'int'
5.5.5. Поиск в списках и метод index
Если вы хотите узнать, в какой позиции списка находится некоторое значение (то есть недостаточно знать, присутствует значение в списке или нет), используйте метод index . Этот метод ищет в списке элемент, эквивалентный заданному значе-нию, и возвращает позицию этого элемента:
>>> x = [1, 3, "five", 7, -2]
>>> x.index(7)
3
>>> x.index(5)
Traceback (innermost last):
File "", line 1, in ?
ValueError: 5 is not in list
Как видно из этого примера, при попытке определить позицию несуществующего элемента происходит ошибка. Эта ошибка обрабатывается точно так же, как и ана-логичная ошибка, которая может происходить при вызове remove (то есть проверкой списка оператором in перед вызовом index ).
5.5.6. Подсчет вхождений методом countМетод count также проводит поиск заданного значения по списку, но вместо по-зиционной информации возвращает количество вхождений значения в список: >>> x = [1, 2, 2, 3, 5, 2, 5]
>>> x.count(2)
3
>>> x.count(5)
2
>>> x.count(4)
5.5.7. Сводка операций со списками
Как видите, списки представляют собой чрезвычайно мощные структуры данных, которые по своим возможностям далеко превосходят старые добрые массивы. Опе-рации со списками играют настолько важную роль в программировании на Python, что я для удобства приведу их краткую сводку в табл. 5.1. Таблица 5.1. Операции со списками

Если вы будете знать основные операции со списками, ваша жизнь как програм-миста Python заметно упростится.
БЫСТРАЯ.ПРОВЕРКА:.ОПЕРАЦИИ.СО.СПИСКАМИ Какой результат вернет вызов len([[1,2]] * 3)?
Опишите два различия между оператором in и методом index() списков? Какой из следующих вызовов приведет к выдаче исключения: min(["a", "b", "c"]) ; max([1, 2, "three"]) ; [1, 2, 3].count("one") ?
ПОПРОБУЙТЕ.САМИ:.ОПЕРАЦИИ.СО.СПИСКАМИ Имеется список x . Напишите код безопасного удаления элемента в том — и толь-ко в том! — случае, если значение присутствует в списке. Измените код так, чтобы элемент удалялся только в том случае, если элемент присутствует в списке более чем в одном экземпляре.
5.6. Вложенные списки и глубокое копированиеВ этом разделе рассматривается еще одна нетривиальная тема, которую можно пропустить, если вы только изучаете язык.
Как упоминалось ранее, списки могут содержать вложенные списки. В частности, вложение списков может использоваться для представления двумерных матриц. К элементам этих матриц можно обращаться по двумерным индексам. Индексы матриц работают так:
>>> m = [[0, 1, 2], [10, 11, 12], [20, 21, 22]]
>>> m[0]
[0, 1, 2]
>>> m[0][1]
1
>>> m[2]
[20, 21, 22]
>>> m[2][2]
22
Этот механизм естественным образом масштабируется для большего количества измерений.
В большинстве случаев ни о чем больше вам беспокоиться не придется. Однако у вас могут возникнуть проблемы с вложенными списками — они возникают из-за того, как переменные связываются с объектами, и из-за возможности изменения некоторых объектов (например, списков). Следующий пример демонстрирует эти проблемы:
>>> nested = [0]
>>> original = [nested, 1]
>>> original
[[0], 1]
Рисунок 5.1 поясняет суть происходящего. Теперь зна-чение во вложенном списке можно изменить как через переменную nested , так и через original :
>>> nested[0] = 'zero'
>>> original
[['zero'], 1] Рис. 5.1. Список, первый
>>> original[0][0] = 0 элемент которого ссылается
>>> nested на вложенный список
>>> original
[[0], 1]
Но если присвоить nested другой список, связь между списками будет разорвана: >>> nested = [2]
>>> original
[[0], 1]
Эта ситуация изображена на рис. 5.2.
Вы уже видели, что для создания копии списка можно воспользоваться полным сегментом (то есть x[:] ). Также копию списка можно получить при помощи опе-ратора + или * (например, x + [] или x * 1 ). Эти способы несколько уступают по эффективности способу с сег-ментом. Все три способа создают поверхностную копию списка — вероятно, в большинстве случаев это именно то, что вам нужно. Но если ваш список содержит другие вложенные списки, возможно, вы предпочтете создать Рис. 5.2. Первый элемент глубокую копию. Для этого можно воспользоваться исходного списка все ещефункцией deepcopy модуля copy : остается вложенным списком,>>> original = [[0], 1] ссылается на другой список но переменная nested>>> shallow = original[:]
>>> import copy
>>> deep = copy.deepcopy(original)
Рисунок 5.3 поясняет суть глубокого копирования.
Списки, на которые указывают переменные original или shallow, связаны. Изме-нение значения во вложенном списке через одну переменную повлияет на другую переменную:
Читать дальшеИнтервал:
Закладка: