Сортировка списка по части елемента нижеописанным алгоритмом

Есть список out = ['123 700', '456 -300', '789 -200'] состоящий из 3 элементов разделенных точкой с запятой. Каждый элемент - это номер счета - пробел - сумма. Нужно отсортировать список по сумме таким алгоритмом: Проходим циклом по всем элементам и сохраняем в переменную вне цикла элемент с минимальной суммой. После выполнения цикла записываем эту сумму в новый список outsort и удаляем ее из out. У меня все работает правильно, но строка с удалением ломает алгоритм, как изменить код, чтоб удалять правильно?

out = ['123 700', '456 -300', '789 -200']
q = 1
minn = "999 99999999"
i_minn = 0
outsort = []
while q <= len(out):
    for i in range(len(out)):
        if int(minn[4:]) > int(out[i][4:]):
            minn = out[i]
            i_minn = i
    outsort.append(minn)
    del out[i_minn]
    q += 1

print(out)
print(outsort)

['123 700', '456 -300', '789 -200'] - исходный список
['456 -300', '789 -200', '123 700'] - ожидаемый список
['456 -300', '456 -300'] - то что получается этим кодом

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

Автор решения: Сергей

Так надо, если алгоритм не менять (и фраза "строка с удалением ломает алгоритм" сбивает с толку - с этой строкой всё нормально):

out = ['123 700', '456 -300', '789 -200']
# Тут не нужен i_minn
outsort = []
# Поменяли неверное условие выхода и убрали лишний счетчик
while len(out):
    # Поменяли минимальный элемент  
    minn = '999 999999999'
    for i in range(len(out)):
        if int(minn[4:]) >= int(out[i][4:]):
            minn = out[i]
            i_minn = i
    outsort.append(minn)
    del out[i_minn]

print(out)
print(outsort)

Если поменять алгоритм:

out = ['123 700', '456 -300', '789 -200']
outsort = sorted(out, key=lambda x: int(x[4:]))
print (outsort)
→ Ссылка
Автор решения: sayfdor
out = ['123 700', '456 -300', '789 -200']
dictionary = {int(x): int(y) for x, y in [(x.split(' ')[0], x.split(' ')[1]) for x in out]}
sorted_dict = sorted(dictionary.items(), key=lambda x: x[1])
sorted_dict = [' '.join(x) for x in [(str(x), str(y)) for x, y in sorted_dict]]
print(sorted_dict)

Вывод, как вы и хотели - ['456 -300', '789 -200', '123 700']. В строке объявления dictionary генерируем словарь по "вторым объектам" строки с помощью генератора словаря и вложенного в него генератора списков. В следующей строке сортируем этот список. Затем склеиваем с помощью ' '.join(x) и принтим список, который вам нужен.

→ Ссылка