Метод sort() и функция sorted() в Python: различия и применение
Python

Метод sort() и функция sorted() в Python: различия и применение

Razilator

Сортировка - это процесс организации элементов коллекции в определенном порядке. В Python для сортировки коллекций можно использовать метод sort() для списков и функцию sorted() для различных итерируемых объектов. Обе эти функции позволяют сортировать элементы в порядке возрастания или убывания, в зависимости от указанного параметра.

Функция sorted() в Python

Функция sorted() возвращает новый отсортированный список (list) из переданной ей итерируемой коллекции. Функция возвращает отсортированный список, не меняя порядок элементов в исходной коллекции.

Синтаксис функции sorted():

sorted(iterable, key=None, reverse=False)

где:

  • iterable: обязательный параметр, представляющий итерируемый объект или встроенную последовательность, элементы которого требуется отсортировать.
  • key: необязательный параметр, представляющий функцию, которая определяет ключ сортировки. По умолчанию None, что означает сортировку по значениям элементов.
  • reverse: необязательный параметр, определяющий порядок сортировки. Если - reverse=True, то сортировка будет производиться в обратном порядке (от большего к меньшему), а если reverse=False (по умолчанию), то сортировка будет производиться в прямом порядке (от меньшего к большему).

Пример использования функции sorted():

main.py
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

fruits = ('apple', 'orange', 'banana', 'cherry', 'date', 'apricot')
sorted_fruits = tuple(sorted(fruits))
print(sorted_fruits)  # ('apple', 'apricot', 'banana', 'cherry', 'date', 'orange')

Данный код использует функцию sorted() для сортировки различных коллекций: списка numbers, кортежа fruits и словаря word_count.

Для списка numbers функция sorted() сортирует числа в порядке возрастания и сохраняет отсортированный список в переменную sorted_numbers. Результат выводится на экран с помощью функции print(), и на экран выводится отсортированный список sorted_numbers, который выглядит следующим образом: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9].

Для кортежа fruits функция sorted() сортирует строки в алфавитном порядке и сохраняет отсортированный список в переменную sorted_fruits. Затем с помощью функции tuple() отсортированный список sorted_fruits преобразуется обратно в кортеж. Результат выводится на экран с помощью функции print(), и на экран выводится отсортированный кортеж sorted_fruits, который выглядит следующим образом: ('apple', 'apricot', 'banana', 'cherry', 'date', 'orange').

Для словаря word_count функция sorted() сортирует элементы словаря (пары "ключ-значение") на основе значений (в данном случае, по убыванию значения) с помощью аргумента key, указав лямбда-функцию, которая возвращает значение x[1]. Отсортированные пары "ключ-значение" сохраняются в переменную sorted_word_count. Затем с помощью функции dict() отсортированные пары "ключ-значение" преобразуются обратно в словарь. Результат выводится на экран с помощью функции print(), и на экран выводится отсортированный словарь sorted_word_count, который выглядит следующим образом: {'orange': 4, 'banana': 3, 'date': 3, 'apple': 2, 'cherry': 1}

Метод sort() в Python

Метод sort() - это встроенный метод в Python, который используется для сортировки элементов в списке на месте, то есть изменяет оригинальный список, не создавая нового списка. Метод sort() имеет следующий синтаксис:

list.sort(key=None, reverse=False)

где:

  • key (опционально) - функция, которая указывает на то, по какому критерию должна выполняться сортировка. Если не указана, то сортировка будет производиться по значениям элементов списка по умолчанию.
  • reverse (опционально) - булевое значение, указывающее на то, нужно ли выполнять сортировку в обратном порядке (по умолчанию равно False, то есть сортировка выполняется в возрастающем порядке).

Сортировка списка чисел в возрастающем порядке:

main.py
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

Данный код выполняет сортировку списка numbers в порядке возрастания с использованием метода sort(). Сначала создается список чисел numbers с заданными значениями: [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]. Затем вызывается метод sort() на этом списке, который сортирует его в порядке возрастания. После сортировки список numbers будет изменен и содержать числа в отсортированном порядке: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9].

Сортировка списка строк в алфавитном порядке:

main.py
fruits = ['apple', 'orange', 'banana', 'cherry', 'date', 'apricot']
fruits.sort()
print(fruits)  # ['apricot', 'banana', 'cherry', 'date', 'orange']

Данный код выполняет сортировку списка fruits в алфавитном порядке с использованием метода sort(). Сначала создается список фруктов fruits с заданными значениями: ['apple', 'orange', 'banana', 'cherry', 'date', 'apricot']. Затем вызывается метод sort() на этом списке, который сортирует его в алфавитном порядке (по порядку символов в строках) в возрастающем порядке. После сортировки список fruits будет изменен и содержать фрукты в алфавитном порядке: ['apricot', 'banana', 'cherry', 'date', 'orange'].

Сортировка списка объектов пользовательского класса Person по возрасту, используя функцию key:

main.py
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

people = [Person("Alice", 25), Person("Bob", 30), Person("Charlie", 22), Person("Dave", 28)]

people.sort(key=lambda x: x.age)

for person in people:
    print(person.name, person.age)
    
# Output:
# Charlie 22
# Alice 25
# Dave 28
# Bob 30

Данный код содержит определение класса Person и создание списка объектов этого класса people. Затем выполняется сортировка списка people по возрасту объектов с использованием метода sort() и аргумента key с лямбда-функцией lambda x: x.age.

Пояснение к коду:

class Person: - определение класса Person, который имеет два атрибута name и age. def __init__(self, name, age): - определение конструктора класса Person, который инициализирует атрибуты name и age объекта при его создании. self.name = name и self.age = age - установка значений атрибутов name и age объекта Person на основе переданных аргументов конструктора. people = [Person("Alice", 25), Person("Bob", 30), Person("Charlie", 22), Person("Dave", 28)] - создание списка people, содержащего объекты класса Person с заданными значениями имени и возраста. people.sort(key=lambda x: x.age) - сортировка списка people по возрасту объектов. Аргумент key указывает на функцию, которая будет использоваться для определения ключа сортировки. В данном случае, используется лямбда-функция lambda x: x.age, которая возвращает значение атрибута age объекта x, на основе которого будет выполняться сортировка. for person in people: - цикл for, который перебирает каждый объект person в списке people. print(person.name, person.age) - вывод имени и возраста каждого объекта person на экран. Объекты person будут выведены в порядке, определенном после сортировки, что будет отражать их возраст в порядке возрастания.

Сортировка в обратном порядке с помощью sort() и sorted()

Метод sort() и функция sorted() также имеют дополнительный параметр reverse, который может быть использован для сортировки коллекций в обратном порядке.

Например, если нам нужно отсортировать список чисел по убыванию, мы можем передать параметр reverse=True:

main.py
my_list = [4, 2, 1, 3, 5]
sorted_list = sorted(my_list, reverse=True)
print(sorted_list)  # [5, 4, 3, 2, 1]

my_list.sort(reverse=True)
print(my_list)  # [5, 4, 3, 2, 1]

Данный код выполняет сортировку списка my_list в обратном порядке с использованием функции sorted() и метода sort() с аргументом reverse=True.

Пояснение к коду:

my_list = [4, 2, 1, 3, 5] - создание списка my_list с данными числами. sorted_list = sorted(my_list, reverse=True) - вызов функции sorted() с аргументом my_list и аргументом reverse=True, что указывает на сортировку в обратном порядке. Результат сортировки сохраняется в переменной sorted_list. print(sorted_list) - вывод отсортированного списка на экран. Результат будет [5, 4, 3, 2, 1], так как числа отсортированы в порядке убывания. my_list.sort(reverse=True) - вызов метода sort() на списке my_list с аргументом reverse=True, что указывает на сортировку списка в обратном порядке. print(my_list) - вывод списка my_list после сортировки на экран. Результат будет [5, 4, 3, 2, 1], так как список my_list был отсортирован в обратном порядке с использованием метода sort(). Обратите внимание, что метод sort() выполняет сортировку "на месте", то есть изменяет сам список my_list без создания нового списка.

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

Еще один пример:

main.py
words = ['dog', 'cat', 'fish', 'elephant', 'lion']
sorted_words = sorted(words, reverse=True, key=len)
print(sorted_words)  # ['elephant', 'lion', 'fish', 'cat', 'dog']

words.sort(reverse=True, key=len)
print(words)  # ['elephant', 'lion', 'fish', 'cat', 'dog']

В этом примере мы отсортировали список words в обратном порядке по длине слов с помощью параметра key=len. Это означает, что более длинные слова будут идти раньше в списке.

Далее мы рассмотрим кастомные функции сортировки.

Сортировка строк по длине в Python

main.py
strings = ['some', 'example', 'words', 'here']

# сортировка по длине строк (от меньшей к большей)
strings.sort(key=len)
print(strings)  # ['some', 'here', 'words', 'example']

# сортировка по длине строк (от большей к меньшей)
sorted_strings = sorted(strings, key=len, reverse=True)
print(sorted_strings)  # ['example', 'words', 'some', 'here']

Данный код выполняет сортировку списка strings на основе длины строк в нем с использованием функции sorted() и метода sort() с ключом сортировки key=len и аргументом reverse=True для обратной сортировки.

Пояснение к коду:

strings = ['some', 'example', 'words', 'here'] - создание списка strings с данными строками. strings.sort(key=len) - вызов метода sort() на списке strings с ключом сортировки key=len, что указывает на сортировку списка на основе длины строк в порядке возрастания. Результат сортировки сохраняется в самом списке strings. print(strings) - вывод отсортированного списка strings на экран. Результат будет ['some', 'here', 'words', 'example'], так как строки отсортированы в порядке возрастания длины. sorted_strings = sorted(strings, key=len, reverse=True) - вызов функции sorted() с аргументом strings, ключом сортировки key=len и аргументом reverse=True, что указывает на сортировку списка на основе длины строк в порядке убывания. Результат сортировки сохраняется в переменной sorted_strings. print(sorted_strings) - вывод отсортированного списка sorted_strings на экран. Результат будет ['example', 'words', 'some', 'here'], так как строки отсортированы в порядке убывания длины с использованием функции sorted().

Сортировка чисел по четности в Python

main.py
numbers = [3, 5, 1, 2, 4, 6]

# сортировка чисел по четности (сначала нечетные, потом четные)
numbers.sort(key=lambda x: x % 2)
print(numbers)  # [3, 5, 1, 2, 4, 6]

# сортировка чисел по четности (сначала четные, потом нечетные)
sorted_numbers = sorted(numbers, key=lambda x: x % 2, reverse=True)
print(sorted_numbers)  # [6, 4, 2, 5, 3, 1]

Данный код выполняет сортировку списка numbers на основе четности чисел в нем с использованием функции sorted() и метода sort() с ключом сортировки key=lambda x: x % 2 и аргументом reverse=True для обратной сортировки.

Пояснение к коду:

numbers = [3, 5, 1, 2, 4, 6] - создание списка numbers с данными числами. numbers.sort(key=lambda x: x % 2) - вызов метода sort() на списке numbers с ключом сортировки key=lambda x: x % 2, что указывает на сортировку списка на основе остатка от деления чисел на 2. Таким образом, нечетные числа будут идти перед четными числами в порядке возрастания остатка от деления. Результат сортировки сохраняется в самом списке numbers. print(numbers) - вывод отсортированного списка numbers на экран. Результат будет [3, 5, 1, 2, 4, 6], так как числа отсортированы в порядке нечетных чисел перед четными числами. sorted_numbers = sorted(numbers, key=lambda x: x % 2, reverse=True) - вызов функции sorted() с аргументом numbers, ключом сортировки key=lambda x: x % 2 и аргументом reverse=True, что указывает на сортировку списка на основе остатка от деления чисел на 2 в порядке убывания. Таким образом, четные числа будут идти перед нечетными числами. Результат сортировки сохраняется в переменной sorted_numbers. print(sorted_numbers) - вывод отсортированного списка sorted_numbers на экран. Результат будет [6, 4, 2, 5, 3, 1], так как числа отсортированы в порядке четных чисел перед нечетными числами с использованием функции sorted(). Это только некоторые примеры кастомных сортировок, с помощью функций sort() и sorted() можно реализовать множество других сортировок в зависимости от конкретной задачи.

;