Python:如果没有显式的返回值,合并排序如何影响列表?

时间:2018-04-26 22:04:08

标签: python function return return-value mergesort

我在Java中看到了这个问题的变体,但我无法理解它。为什么在调用函数mergeSort时列表会更改,即使没有显式返回?我无法理解它。递归调用如何返回堆栈中的那些调用?我错过了一些信息来理解代码的内部工作原理,以便在调用alist时获得mergesort更改mergeSort(alist)的原因。

以下是link的代码:

def mergeSort(alist):
print("Splitting ",alist)
if len(alist)>1:
    mid = len(alist)//2
    lefthalf = alist[:mid]
    righthalf = alist[mid:]

    mergeSort(lefthalf)
    mergeSort(righthalf)

    i=0
    j=0
    k=0
    while i < len(lefthalf) and j < len(righthalf):
        if lefthalf[i] < righthalf[j]:
            alist[k]=lefthalf[i]
            i=i+1
        else:
            alist[k]=righthalf[j]
            j=j+1
        k=k+1

    while i < len(lefthalf):
        alist[k]=lefthalf[i]
        i=i+1
        k=k+1

    while j < len(righthalf):
        alist[k]=righthalf[j]
        j=j+1
        k=k+1
print("Merging ",alist)

alist = [54,26,93,17,77,31,44,55,20]
mergeSort(alist)
print(alist)

1 个答案:

答案 0 :(得分:1)

考虑这个小例子:

def foo(lst):
    lst[0] = 1000

lst = [10, 20, 30]
foo(lst)
print(lst) # prints [1000, 20, 30]

它的工作原理是因为列表与任何其他对象一样,通过引用传递

如果这听起来像你的新东西,你应该重新阅读/任何python手册的介绍部分。

理解这个概念可能是一个很好的阅读:https://www.python-course.eu/passing_arguments.php