Курс по Python: https://stepik.org/course/100707
Здесь мы с вами затронем вопрос сортировки итерируемых объектов с помощью метода sort() и функции sorted(). Давайте вначале
посмотрим на отличие в их вызовах. Если у нас имеется какой-либо список:
то этот объект
имеет встроенный метод sort, который меняет его состояние и
расставляет элементы по возрастанию:
Получим
измененный список:
А вот коллекции
кортежи или строки:
b=("ab", "bc", "wd", "gf")
c = "hello world"
не имеют такого
встроенного метода и попытка их отсортировать, записав:
приведет к
ошибке. Для их сортировки как раз и можно воспользоваться второй функцией sorted:
на выходе получим
упорядоченный список
['ab', 'bc', 'gf', 'wd']
Обратите
внимание, чтобы мы не передавали в качестве аргумента функции sorted, на выходе
будем получать именно список отсортированных данных. В данном случае передаем
кортеж, а получаем – список.
Или же, со
строкой:
результатом будет
упорядоченная коллекция из символов:
[' ',
'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
Причем, эта
функция не меняет исходные коллекции b и c, она возвращает
новый список с отсортированными данными. В то время как метод sort для списка
меняет этот список. Вот на это следует также обращать внимание. То есть, если
нам нужно сохранить результат сортировки в переменной, это делается так:
и res будет ссылаться
на список:
['ab', 'bc', 'gf', 'wd']
Также следует
иметь в виду, что сортировка данных возможна для однотипных элементов: или
чисел, или строк, или кортежей, но не их комбинаций. Например, вот такой
список:
a=[1,-45,3,2,100,-4, "b"]
отсортировать не
получится:
возникнет
ошибка, что строку нельзя сравнивать с числом. И то же самое с функцией sorted:
Если уберем
последний элемент:
то все будет
работать:
И этот пример
также показывает, что список можно сортировать и с помощью метода sort и с помощью
функции sorted. Разница только
в том, что метод sort не создает новой коллекции, а меняет уже
существующую. Функция же sorted не меняет исходную коллекцию, а
создает новую с отсортированными элементами. Поэтому, для изменения коллекции a здесь следует
записывать такую конструкцию:
Оба этих подхода
к сортировке поддерживают необязательный параметр
reverse = True/False
который
определяет порядок сортировки: по возрастанию (False) или по
убыванию (True). По умолчанию
стоит значение reverse=False. Если мы
запишем его вот так:
a = sorted(a, reverse=True)
то получим
сортировку по убыванию:
И то же самое с
методом sort:
Давайте еще
посмотрим, как будет работать сортировка для словаря:
d = {'river': "река", 'house': "дом", 'tree': "дерево", 'road': "дорога"}
Очевидно, для
него мы можем использовать только функцию sorted():
которая на
выходе даст список с ключами, отсортированными по возрастанию. И это логично,
так как словарь по умолчанию возвращает именно ключи при его итерировании.
Также можно
использовать конструкции вида:
и
Работают они
очевидным образом.
Надеюсь, из
этого занятия вы лучше стали понимать, как можно выполнять сортировку различных
коллекций в языке Python. Для закрепления этого материала вас
ждут практические задания, а я буду всех ждать на следующем уроке, где мы
продолжим эту тему и поговорим о тонкой настройке алгоритма сортировки данных.
Курс по Python: https://stepik.org/course/100707