Как перенести максимальное число на первое место?
Напишите программу queue.py, которая принимает первым аргументом командной строки последовательность чисел разделенных пробелами, а после ставит самое большое число на первое место и выводит новую очередь на экран. Попробовал вот так:
f = [12, 56, 17, 34, 12, 45, 89, 22, 101, 52]
f.sort(reverse=True)
print(f)
Подскажите пожалуйста, как добиться правильного ответа?
Ответы (6 шт):
Делайте по шагам:
- Находите максимальное значение в списке
- Определяете индекс максимального значения
- Удаляете значение из списка
- Добавляете его в начало списка
Пример:
f = [12, 56, 17, 34, 12, 45, 89, 22, 101, 52]
max_num = max(f)
idx_max_num = f.index(max_num)
f.pop(idx_max_num)
f.insert(0, max_num)
print(f)
# [101, 12, 56, 17, 34, 12, 45, 89, 22, 52]
UPD.
Если индексов несколько, то можно собрать их индексы, удалить их (в обратном порядке, это важно!) и добавить в начало элементы в количестве индексов
Алгоритм сборки индексов можно оптимизировать, если использовать index, счетчик чисел и сразу же удалять максимальное число
Пример:
f = [12, 56, 17, 101, 34, 12, 45, 101, 89, 22, 101, 52]
max_num = max(f)
idxs_max_num = [i for i, x in enumerate(f) if x == max_num]
for i in idxs_max_num[::-1]:
f.pop(i)
for _ in idxs_max_num:
f.insert(0, max_num)
a = [12, 56, 17, 34, 101, 45, 89, 22, 101, 52]
x = max(a)
r = len(a) - 1
for l in range(r, -1, -1):
if a[l] != x:
a[r] = a[l]
r -= 1
for i in range(r, -1, -1):
a[i] = x
print(a)
Ещё вариант через списковое включение, нормально работающий если несколько раз максимум встречается:
f = [12, 56, 17, 34, 12, 45, 89, 22, 101, 52]
fmax = max(f)
fnew = [x for x in f if x == fmax] + [x for x in f if x != fmax]
print(fnew)
Вывод:
[101, 12, 56, 17, 34, 12, 45, 89, 22, 52]
- находим максимум
- создаём список где только максимум(ы)
- добавляем к нему список без максимума(мов)
первая мысль была правильная - надо использовать сортировку, просто еще надо добавить ключ:
f = [12, 56, 101, 17, 34, 12, 45, 89, 22, 101, 52]
f = sorted(f, key=lambda x: x!=max(f))
результат:
[101, 101, 12, 56, 17, 34, 12, 45, 89, 22, 52]
Ответ очень прост:
f = [12, 56, 17, 34, 12, 45, 89, 22, 101, 52]
num = max(f)
f.remove(num)
f.insert(0,num)
print(f)