Метод sort() и функция sorted() в Python: различия и применение
Сортировка - это процесс организации элементов коллекции в определенном порядке. В Python для сортировки коллекций можно использовать метод sort()
для списков и функцию sorted()
для различных итерируемых объектов. Обе эти функции позволяют сортировать элементы в порядке возрастания или убывания, в зависимости от указанного параметра.
Функция sorted() в Python
Функция sorted()
возвращает новый отсортированный список (list) из переданной ей итерируемой коллекции. Функция возвращает отсортированный список, не меняя порядок элементов в исходной коллекции.
Синтаксис функции sorted():
sorted(iterable, key=None, reverse=False)
где:
iterable
: обязательный параметр, представляющий итерируемый объект или встроенную последовательность, элементы которого требуется отсортировать.key
: необязательный параметр, представляющий функцию, которая определяет ключ сортировки. По умолчаниюNone
, что означает сортировку по значениям элементов.reverse
: необязательный параметр, определяющий порядок сортировки. Если -reverse=True
, то сортировка будет производиться в обратном порядке (от большего к меньшему), а еслиreverse=False
(по умолчанию), то сортировка будет производиться в прямом порядке (от меньшего к большему).
Пример использования функции sorted():
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
, то есть сортировка выполняется в возрастающем порядке).
Сортировка списка чисел в возрастающем порядке:
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]
.
Сортировка списка строк в алфавитном порядке:
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:
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
:
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
, чтобы определить функцию, которая будет использоваться для сравнения элементов списка.
Еще один пример:
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
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
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()
можно реализовать множество других сортировок в зависимости от конкретной задачи.