Наоми Седер - Python. Экспресс-курс
- Название:Python. Экспресс-курс
- Автор:
- Жанр:
- Издательство:Питер
- Год:2019
- ISBN:978-5-4461-0908-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Наоми Седер - Python. Экспресс-курс краткое содержание
Наоми Седер рассказывает не только об основных особенностях языка Python, но и его объектно-ориентированных возможностях, которые появились в Python 3. Данное издание учитывает все изменения, которые произошли с языком за последние 5 лет, а последние 5 глав рассказывают о работе с большими данными.
Python. Экспресс-курс - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
>>> x
[1, 2, 4, 3, 5]
>>> x.remove(3)
>>> x
[1, 2, 4, 5]
>>> x.remove(3)
Traceback (innermost last):
File "", line 1, in ?
ValueError: list.remove(x): x not in list
Если метод remove не находит удаляемых элементов, он выдает ошибку. Вы можете перехватить ошибку, используя средства обработки исключений Python, или же предотвратить саму проблему, проверяя наличие элементов в списке оператором in перед тем, как пытаться их удалить.
Метод reverse — специализированный метод изменения списка — эффективно переставляет элементы списка в обратном порядке «на месте»: >>> x = [1, 3, 5, 6, 7]
>>> x.reverse()
>>> x
[7, 6, 5, 3, 1]
ПОПРОБУЙТЕ.САМИ:.МОДИФИКАЦИЯ.СПИСКОВ Допустим, список состоит из 10 элементов. Как переместить три последних элемента из конца в начало списка без нарушения их исходного порядка?
5.4. Сортировка списков
Для сортировки списков используется встроенный метод Python sort : >>> x = [3, 8, 4, 0, 2, 1]
>>> x.sort()
>>> x
[0, 1, 2, 3, 4, 8]
Метод выполняет сортировку «на месте», то есть с изменением сортируемого списка. Если вы хотите отсортировать список без изменения исходного списка, возможны два варианта: либо использовать встроенную функцию sorted() (раз-дел 5.4.2), либо создать копию списка и отсортировать ее. >>> x = [2, 4, 1, 3]
>>> y = x[:]
>>> y.sort()
>>> y
[1, 2, 3, 4]
>>> x
[2, 4, 1, 3]
Сортировка также работает со строками:
>>> x = ["Life", "Is", "Enchanting"]
>>> x.sort()
>>> x
['Enchanting', 'Is', 'Life']
Метод sort может отсортировать почти всё, потому что Python умеет сравнивать почти всё. Однако при сортировке возникает одна загвоздка: ключевой метод, ис-пользуемый по умолчанию при сортировке, требует, чтобы все элементы списка имели совместимые типы. Это означает, что при использовании метода sort для списка, содержащего как числа, так и строки, будет выдано исключение: >>> x = [1, 2, 'hello', 3]
>>> x.sort()
Traceback (most recent call last):
File "", line 1, in
TypeError: '<' not supported between instances of 'str' and 'int' И наоборот, можно спокойно отсортировать список списков: >>> x = [[3, 5], [2, 9], [2, 3], [4, 1], [3, 2]]
>>> x.sort()
>>> x
[[2, 3], [2, 9], [3, 2], [3, 5], [4, 1]]
В соответствии со встроенными правилами сравнения сложных объектов в Python субсписки сортируются сначала по возрастанию первого элемента, а затем по воз-растанию второго элемента.
Метод sort обладает еще большей гибкостью; он поддерживает необязательный параметр reverse . При reverse=True сортировка производится в обратном порядке, и вы можете задать собственную ключевую функцию, определяющую способ сор-тировки элементов списка.
5.4.1. Нестандартная сортировка
Чтобы применить пользовательский критерий сортировки, необходимо уметь опре-делять функции — тема, которая пока еще не рассматривалась. В этом разделе мы также обсудим тот факт, что len(string) возвращает количество символов в строке. Операции со строками более подробно рассмотрены в главе 6. По умолчанию sort использует для определения порядка встроенные функции срав-нения Python; в большинстве случаев этого достаточно. Однако время от времени требуется отсортировать список способом, отличным от порядка по умолчанию. До-пустим, вы хотите отсортировать список слов по количеству символов в слове, а не по критерию лексикографической сортировки, который обычно применяет Python. Для этого следует написать функцию, которая возвращает значение (или ключ) для проведения сортировки, и использовать его с методом sort . В контексте sort эта функция должна получать один аргумент и возвращать ключ или значение, используемое функцией sort .
Чтобы строки упорядочивались по количеству символов, ключевая функция может иметь вид
def compare_num_of_chars(string1):
return len(string1)
Эта ключевая функция тривиальна — она передает методу сортировки длину строк (вместо самих строк).
После того как вы определите ключевую функцию, остается передать ее методу sort с именем key . Так как функции являются объектами Python, они могут передаваться функциям как любые другие объекты Python. Ниже приведена небольшая програм-ма, демонстрирующая различия между стандартной и нестандартной сортировкой: >>> def compare_num_of_chars(string1):
... return len(string1)
>>> word_list = ['Python', 'is', 'better', 'than', 'C'] >>> word_list.sort()
>>> print(word_list)
['C', 'Python', 'better', 'is', 'than']
>>> word_list = ['Python', 'is', 'better', 'than', 'C'] >>> word_list.sort(key=compare_num_of_chars)
>>> print(word_list)
['C', 'is', 'than', 'Python', 'better']
Первый список упорядочен в лексикографическом порядке (верхний регистр предшествует нижнему), а второй список упорядочен по возрастанию количества символов.
Нестандартная сортировка чрезвычайно полезна, но она может быть медленнее стандартной. Обычно эффект минимален, и все же с особенно сложными ключевы-ми функциями он становится заметным, особенно если в сортировке задействованы сотни тысяч и миллионы элементов.
В частности, нестандартной сортировки стоит избегать при упорядочении списка по убыванию (а не по возрастанию). В этом случае параметру reverse метода sort задается значение True . Если по какой-либо причине это решение оказы-вается неприемлемым, все равно будет лучше отсортировать список обычным способом, а затем воспользоваться методом reverse для перестановки элементов полученного списка в обратном порядке. Эти две операции — стандартная со-ртировка и обратная перестановка — будут выполняться намного быстрее, чем нестандартная сортировка.
5.4.2. Функция sorted()
У списков имеется встроенный метод для сортировки, но у других итерируемых типов Python (например, у ключей словаря) метода sort нет. У Python также име-ется встроенная функция sorted() , которая возвращает отсортированный список, построенная на базе любого итерируемого типа. Функция sorted() использует те же параметры key и reverse , что и метод sort :
>>> x = (4, 3, 1, 2)
>>> y = sorted(x)
>>> y
[1, 2, 3, 4]
>>> z = sorted(x, reverse=True)
>>> z
[4, 3, 2, 1]
ПОПРОБУЙТЕ.САМИ:.СОРТИРОВКА.СПИСКОВ Имеется список, каждый элемент которого также является списком: [[1, 2, 3], [2, 1, 3], [4, 0, 1]] . Допустим, вы хотите отсортировать этот список по второму элементу каждого списка, чтобы получить результат [[4, 0, 1], [2, 1, 3], [1, 2, 3]] . Какую функцию вы бы написали для передачи в параметре key метода sort() ?
5.5. Другие распространенные операции со спискамиТакже у списков есть несколько других часто используемых методов, которые не относятся ни к какой конкретной категории.
5.5.1. Проверка принадлежности оператором inЧтобы легко определить, присутствует ли некоторое значение в списке, воспользуй-тесь оператором in , возвращающим логическое значение. Также можно выполнить обратную проверку с оператором not in :
>>> 3 in [1, 3, 4, 5]
True
>>> 3 not in [1, 3, 4, 5]
False
>>> 3 in ["one", "two", "three"]
False
>>> 3 not in ["one", "two", "three"]
True
Читать дальшеИнтервал:
Закладка: