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 шт):
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()
Код, который вам нужен:
a = [56,54,85,61,0,2,9,5,74,0]
print(sorted(a))
Сортирует по возрастанию! Намного легче и удобнее!
После первого перехода циклом 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)