Как найти два максимума в массиве во время цикла while

Дан массив чисел:

arr = [1,2,3,4,5] 

Нужно присвоить двум другим переменным 2 максимума массивах.
Тогда a = 5, b = 4.
Затем удалить их обоих и внести в новый массив их разность.
То есть 1,2,3,4,5 превратится в 1,2,3,1.

Мой код (не верно работает):

class Solution:
    def lastStoneWeight(self, stones: List[int]) -> int:
        while len(stones)>1:
            a=max(stones)
            stones.remove(max(stones))
            b=max(stones)
            a-=b
            if a==b:
                a=0
                b=0
            b=0
        return a

Ответы (2 шт):

Автор решения: And

Есть замечательная функция max - которая находит максимальный элемент массива.
Берем ее, находим максимальный элемент, выпиливаем, юзаем еще раз, находим второй максимум, выпиливаем, делаем вычитание одного из другого, запиливаем обратно в массив:

arr = [1,2,3,4,5]
oneMax = max(arr)
arr.remove(oneMax)
twoMax = max(arr)
arr.remove(twoMax)
diff = oneMax - twoMax
arr.append(diff)
print(arr)

Вывод:

[1,2,3,1]
→ Ссылка
Автор решения: nomnoms12

Решение за один проход с помощью цикла while:

li = [1, 2, 3, 4, 5]

second_max, first_max = sorted([li[0], li[1]])

i = 2
while i < len(li):
    x = li[i]
    if x > first_max:
        second_max = first_max
        first_max = x
    elif x > second_max:
        second_max = x
    i += 1

d = first_max - second_max
li.remove(first_max)
li.remove(second_max)
li.append(d)

print(li)

stdout:

[1, 2, 3, 1]
→ Ссылка