Как перенести максимальное число на первое место?

Напишите программу queue.py, которая принимает первым аргументом командной строки последовательность чисел разделенных пробелами, а после ставит самое большое число на первое место и выводит новую очередь на экран. Попробовал вот так:

f = [12, 56, 17, 34, 12, 45, 89, 22, 101, 52]
f.sort(reverse=True)
print(f)

Подскажите пожалуйста, как добиться правильного ответа?


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

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

Найдите максимум, удалите его, потом вставьте в начало

→ Ссылка
Автор решения: gil9red

Делайте по шагам:

  • Находите максимальное значение в списке
  • Определяете индекс максимального значения
  • Удаляете значение из списка
  • Добавляете его в начало списка

Пример:

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)
→ Ссылка
Автор решения: Qwertiy

https://ideone.com/kFAfY5

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)
→ Ссылка
Автор решения: CrazyElf

Ещё вариант через списковое включение, нормально работающий если несколько раз максимум встречается:

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]
  • находим максимум
  • создаём список где только максимум(ы)
  • добавляем к нему список без максимума(мов)
→ Ссылка
Автор решения: SergFSM

первая мысль была правильная - надо использовать сортировку, просто еще надо добавить ключ:

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]
→ Ссылка
Автор решения: Fantaz 24it

Ответ очень прост:

f = [12, 56, 17, 34, 12, 45, 89, 22, 101, 52]
num = max(f)
f.remove(num)
f.insert(0,num)
print(f)
→ Ссылка