Как можно отсортировать не сам список, а его атрибуты?

Помогите, пожалуйста. Список (players) состоит из объектов (hand, другого класса), у каждого есть атрибут (value), являющийся целым числом. Как отсортировать value, не создавая заранее нового списка из них? Хочу найти в списке players сам объект, имеющий максимальное значение атрибута, а не только сам атрибут.
8 ответов

У списка есть специальный метод для этого, воспользуемся им.


alex925, список состоит из объектов. Если написать players.sort(reverse=True), то выдаёт ошибку: TypeError: unorderable types: Hand() < Hand() Если написать с объектами и атрибутами players.hand.value.sort(reverse=True), то выдаёт другую ошибку: AttributeError: 'list' object has no attribute 'hand'


Ну во-первых:
Как отсортировать value, не создавая заранее нового списка из них?
С таким ограничением - никак. В памяти отсортированный порядок всё равно должен храниться, иначе даже отсортировать не получится.У метода sort есть возможность задавать параметр для сортировки, почитайте документацию. Но и это ещё не всё. Во-вторых:
Хочу найти в списке players сам объект, имеющий максимальное значение атрибута,
Для этого сортировка не нужна. Для этого служит функция max, и принимает аналогичный параметр.


dondublon, спасибо, буду разбираться. А документация на русском языке есть или нет?


Есть такая книга, практически полностью повторяет офдоку:
Г. Россум, Ф.Л.Дж.Дрейк, Д.С.Откидач Язык программирования Python
Но я бы не советовал. Лучше привыкать к английской документации.


Franek,
class Temp:
    def __init__(self, arg):
        self.a = arg
 
    def __repr__(self):
        return str(self.a)
 
data = [Temp(i) for i in range(5)]
print(data)
data.sort(key=lambda i: i.a, reverse=True)
print(data)


alex925, спасибо, работает. Получается key=lambda... принимает элемент списка i, а возвращает копию его атрибута a и по ним идёт сортировка?


Franek, терминология не правильная, но идея правильная.