全局变量仅在某些情况下发生变化

时间:2017-02-22 10:40:22

标签: python list python-3.x global-variables

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)

相反,我希望insertSort函数更改我原来的lst变量,当我弹出值进行排序时它会发生变化,但是当我在函数结束之前将它设置为sortedLst时它不会改变。

提前感谢您的任何答案:)。

1 个答案:

答案 0 :(得分:0)

你根本不会改变任何全局变量。

您可以通过在lst函数中将insertionSort声明为全局来解决此问题,但我不确定您为什么要这样做;只需返回sortedLst并打印出来就好了。