Python. Если в списке есть одинаковые числа, то не могу сортировать через min

Если в списке есть одинаковые числа, то сортировка через min не работает. С max вроде все нормально работает, а с min нет. Подскажите, пожалуйста, из-за чего может так происходить? может проблема в index?

1 Вариант

     a = [56,54,85,61,0,2,9,5,74,0]
     n = len(a) 
     for i in range(n):
         k = a.index(min(a[i:]))
         a[i],a[k] = a[k],a[i]
     print(a)
     #результат [54, 85, 61, 56, 2, 9, 5, 74, 0, 0]

2 Вариант

    a = [56,54,85,61,0,2,9,5,74]
    n = len(a) 

    for i in range(n):
        k = a.index(min(a[i:]))
        a[i],a[k] = a[k],a[i]
    print(a)
    #результат [0, 2, 5, 9, 54, 56, 61, 74, 85]

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

Автор решения: Max Watson
a = [56, 54, 85, 61, 0, 2, 9, 5, 74, 0]
n = len(a)
for i in range(n):
    min_val = min(a[i:])
    min_idx = a.index(min_val, i)  # Ищем индекс минимального элемента среди элементов начиная с индекса i
    a[i], a[min_idx] = a[min_idx], a[i]
print(a)
# Результат [0, 0, 2, 5, 9, 54, 56, 61, 74, 85]

Вместо использования функции index(), вы можете создать подсписок a[i:] и найти минимальный элемент в нем с помощью функции min()

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

Код, который вам нужен:

a = [56,54,85,61,0,2,9,5,74,0]
    print(sorted(a))

Сортирует по возрастанию! Намного легче и удобнее!

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

После первого перехода циклом for будет все так, как вы ожидали — минимальный элемент будет в начале списка:

[0, 56, 54, 85, 61, 2, 9, 5, 74, 0]

В последующих шагах min(a[i:]) найдет значение 0 (на последней позиции среза a[i:]), что хорошо, НО

затем вы ищете это значение (0) в целом списке а:

a.index(min(a[i:]))

Значит, оно будет вычисляться как a.index(0), найдет 0 сразу в начале списка, и вы получите индекс этого ноля, а не индекс второго ноля.


Исправление:

Ищите индекс элемента не в целом списке, а только с позиции i, т.е. вместо

k = a.index(min(a[i:]))

примените

k = a.index(min(a[i:]), i)
→ Ссылка