Сортировка списка объектов в Python

Vaibhhav Khetarpal 30 Январь 2023 13 Июль 2021
  1. Используйте метод list.sort() для сортировки списка объектов в Python
  2. Используйте функцию sorted() для сортировки списка объектов в Python
Сортировка списка объектов в Python

Списки Python не однородны, что отличает их от других типов данных, представленных в Python.

Индексирование списка начинается с 0 в качестве первого индекса и выполняется последовательно. Все элементы в списке имеют свое определенное место, из-за чего в списках допускается дублирование.

В этом руководстве будут представлены различные методы сортировки списка объектов в Python.

Используйте метод list.sort() для сортировки списка объектов в Python

Метод list.sort() сортирует все элементы списка в порядке возрастания или убывания.

Он содержит два необязательных параметра: key и reverse. Параметр key, как следует из его названия, служит ключом для процесса сортировки. Параметр reverse используется для определения порядка сортировки. Если значение reverse равно True, то сортировка происходит в обратном / убывающем порядке.

Однако функция отлично работает без использования вышеупомянутых дополнительных параметров.

Следующий код использует метод list.sort() для сортировки списка объектов в Python.

class BankEMP:
 
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age
 
    def __repr__(self):
        return '{' + self.name + ', ' + self.dept + ', ' + str(self.age) + '}'
 
if __name__ == '__main__':
 
    emps = [
        BankEMP('Elijah', 'IT', 20),
        BankEMP('Nik', 'Banking', 21),
        BankEMP('Lucien', 'Finance', 19)
    ]
    # sort list by `name` in the natural order
    emps.sort(key=lambda x: x.name)
    print(emps)
 
    # sort list by `name` in reverse order
    emps.sort(key=lambda x: x.name, reverse=True)
    print(emps)

Выход:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]
[{Nik, Banking, 21}, {Lucien, Finance, 19}, {Elijah, IT, 20}]

Чтобы получить значение параметра key, мы можем использовать operator.attrgetter().

attrgetter () импортируется из модуля operator и используется для возврата вызываемого объекта, который извлекает атрибут из своего операнда.

Следующий код использует метод list.sort() и operator.attrgetter() для сортировки списка объектов в Python.

from operator import attrgetter
 
class BankEMP:
 
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age
 
    def __repr__(self):
        return '{' + self.name + ', ' + self.dept + ', ' + str(self.age) + '}'
 
if __name__ == '__main__':
    
    emps = [
        BankEMP('Elijah', 'IT', 20),
        BankEMP('Nik', 'Banking', 21),
        BankEMP('Lucien', 'Finance', 19)
    ]
    #sort list by name in the natural order using 'attrgetter()' 
    emps.sort(key=attrgetter('name'))
 
    print(emps)

Выход:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]

Используйте функцию sorted() для сортировки списка объектов в Python

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

В то время как list.sort() не возвращает какое-либо конкретное значение и вносит изменения в исходный список, функция sorted() возвращает отсортированный список, а не вносит какие-либо изменения в исходный список.

Функция sorted() содержит только reverse в качестве необязательного параметра.

Следующий код использует функцию sorted() для сортировки списка объектов в Python.

class BankEMP:
 
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age
 
    def __repr__(self):
        return '{' + self.name + ', ' + self.dept + ', ' + str(self.age) + '}'
 
if __name__ == '__main__':
    
    emps = [
        BankEMP('Elijah', 'IT', 20),
        BankEMP('Nik', 'Banking', 21),
        BankEMP('Lucien', 'Finance', 19)
    ]
    
    #sort list in natural order of name using sorted() function
    sort1= sorted(emps, key=lambda x: x.name)
    print(sort1)

Выход:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

Сопутствующая статья - Python List