def insertionSort(lst):
#create variable to store final sorted list
sortedLst = []
#add any number into the list so the program can start inserting
sortedLst.append(lst.pop())
#for each item left over in the original list compare to sorted list
for sortInd in range(len(lst)-1,-1,-1):
#for each index to sort
for sortingInd in range(len(sortedLst),-1,-1):
if sortingInd == 0 or sortingInd == len(sortedLst):
sortedLst.insert(sortingInd,lst.pop())
break
if lst[sortInd] > sortedLst[sortingInd]:
sortedLst.insert(sortingInd,lst.pop())
break
print(sortedLst) #gives [1,2,3]
print(lst) #gives []
lst = sortedLst
print(lst) #gives [1,2,3]
lst = [3,2,1]
insertionSort(lst)
#lst should be [1,2,3] yet gives []
print(lst)
Я пытаюсь запрограммировать сортировку вставки, сама сортировка вставки действительно работает, поскольку это часть большего числа типов, которые я запрограммировал, я специально не хочу объявлять новую переменную для отсортированного списка вне функции и функция возвращает отсортированный список, чтобы он соответствовал моим другим функциям. например, я не хочу:Глобальные переменные изменялись только в некоторых случаях
lst = [3,2,1]
newLst = insertionSort(lst)
Вместо этого я хочу функцию, чтобы изменить сортировку вставок моего оригинальный LST переменными и это изменится, когда я сую значение для сортировки, но не меняется, когда я поставил его на sortedLst до функция заканчивается.
Заранее благодарю за любые ответы :).
Python имеет отличную документацию, это должно быть объяснено в разделе [модель исполнения] (https://docs.python.org/3/reference/executionmodel.html). Например, 'lst' внутри вашей функции ** не является **' lst' вне вашей функции и что 'lst = x' не копирует' x'. – MSeifert
Хм, я это понимаю, и есть смысл, почему мой lst не изменился на мой sortedLst, когда я делаю «lst = sortedLst», но почему lst.pop() фактически появляется из моей первой вне функции, а не только внутри? Thanks – Adam
Вы знаете о различии между именами, ссылками (указателями) и значениями? – MSeifert