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が私が 'lst = sortedLst'を実行するときに私のsortedLstに変更されないのかについては理解していますが、なぜlst.pop()内部の? ありがとう – Adam
名前、参照(ポインタ)と値の違いについて知っていますか? – MSeifert