Роман Г.card.quoted14 kun oldin
def sorting_two(A):

return tuple(sorted(A, reverse=True)[:2]) ❶

def double_two(A):

my_max = max(A) ❷

copy = list(A)

copy.remove(my_max) ❸

return (my_max, max(copy)) ❹

def mutable_two(A):

idx = max(range(len(A)), key=A.__getitem__) ❺

my_max = A[idx] ❻

del A[idx]

second = max(A) ❼

A.insert(idx, my_max) ❽

return (my_max, second)

❶ Создать из A новый отсортированный список и вернуть первые два его элемента.

❷ Использовать встроенную функцию max() и найти максимум.

❸ Создать дубликат списка A и удалить из него этот максимум.

❹ Вернуть кортеж из сходного максимума и максимума в урезанной копии.

❺ Трюк Python, который позволяет найти индекс наибольшего значения, а не само наибольшее значение.

❻ Запомнить максимум my_max и удалить его из A.

❼ Найти еще один max() в усеченном списке.

❽ Вставить максимальное значение my_max на место.

Трюк ❺ работает так. Как и все операции с объектами в Python, операция индексирования (то есть квадратные скобки) имеет эквивалентный ей метод — .__getitem__(). Параметр key=функция в функции max(последовательность) означает, что максимум будет вычисляться не в исходной последовательности элемент0, элемент1…, а в последовательности функция(элемент0), функция(элемент1)…, а в качестве результата функция вернет некоторый элементm. В нашем примере элементы — это 0, 1… m… len(A)-1, то есть индексы всех объектов в A, а максимум вычисляется среди A.__getitiem__(0), A.__getitiem__(1)…, то есть среди A[0], A[1]…, а возвращается при этом индекс m.
  • Fikr bildirish uchun kirish yoki roʻyxatdan oʻtish