Типичная проблема, с которой сталкиваются программисты на Python — необходимость отсортировать список объектов по одному из атрибутов объекта. Возьмем для примера список объектов класса Book
, где каждый объект имеет атрибуты title
и pages
.
class Book: def __init__(self, title, pages): self.title = title self.pages = pages books = [ Book('War and Peace', 1225), Book('The Catcher in the Rye', 277), Book('To Kill a Mockingbird', 281), Book('1984', 328) ]
Задача состоит в том, чтобы отсортировать этот список по количеству страниц (pages
) в порядке убывания.
Существует несколько способов решения этой задачи на Python. Один из самых удобных и популярных — использование встроенной функции sort()
или функции sorted()
. Обе эти функции принимают ключевой аргумент key
, который определяет по какому принципу будет происходить сортировка.
books.sort(key=lambda book: book.pages, reverse=True)
В этом примере lambda
-функция используется для определения атрибута, по которому будет происходить сортировка (book.pages
). Аргумент reverse=True
указывает на то, что сортировка должна быть выполнена в порядке убывания.
Теперь список книг отсортирован по количеству страниц, начиная с самой объемной:
for book in books: print(book.title, book.pages)
На выходе получаем:
War and Peace 1225
1984 328
To Kill a Mockingbird 281
The Catcher in the Rye 277
Стоит отметить, что функция sort()
сортирует список на месте (т.е. изменяет исходный список), в то время как функция sorted()
возвращает новый отсортированный список, не меняя исходный.
Добавить комментарий