为什么这个插入排序算法输出无?

-1 python sorting algorithm insertion-sort

def insertion_sort(list):
    for index in range(1,len(list)):
        value = list[index]
        i = index - 1
        while i>=0:
            if value < list[i]:
                list[i+1] = list[i]
                list[i] = value
                i = i - 1
            else:
                break

a = [7,1,3,5,9,2,3]

print(insertion_sort(a))
Run Code Online (Sandbox Code Playgroud)

此代码取自可汗学院的视频.但是,当我尝试在Jupyter Notebook和IDLE上自己运行它时,它输出None.我无法弄清楚为什么它与视频完全相同.在此先感谢您的帮助.

aba*_*ert 5

你的功能在return任何地方都没有声明.如果函数没有return明确的任何内容,它总是返回None.

并且几乎可以肯定的是,这个函数不返回任何东西.


请注意,该函数就地改变了它的参数:

>>> a = [7,1,3,5,9,2,3]
>>> insertion_sort(a)
>>> a
[1, 2, 3, 3, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)

在Python中,对于执行此操作而不返回任何内容的函数来说,这是惯用的.例如,参见像list.sort和的内置方法list.append.

请注意,在引用的视频中,这正是教师所做的 - 他们不是print结果insertion_sort,他们只是调用它,然后查看变量的值.


此外,一般来说,像这样修改一个值的函数采用命令式动词,如list方法sort,而函数使参数保持不变但返回转换后的值,取一个过去的分词,就像构建一样 -在功能上sorted.

因此,如果这个函数被命名insertion_sorted,那么Python程序员会希望它单独留下它的参数并返回一个新的排序列表; 因为它被命名insertion_sort,所以它们会期望它在原地排序并且不返回任何东西.