在Python中实现快速排序时出现差异

时间:2017-01-10 17:53:07

标签: python function methods quicksort

这是我在Python中使用quicksort的实现:

def quicksort(alist):
    if len(alist) <= 1:
        return alist
    else:
        pivot = alist[len(alist)//2]
        alist.remove(pivot)
        alist1, alist2 = partition(alist, pivot)
        return quicksort(alist1) + [pivot] + quicksort(alist2)

def partition(alist, pivot):
    alist1 = []
    alist2 = []
    for e in alist:
        if e <= pivot:
            alist1.append(e)
        else:
            alist2.append(e)
    return (alist1, alist2)

此实现正常。但请看第6和第7行,分别是alist.remove(pivot)alist1, alist2 = partition(alist, pivot)。如果我尝试通过重写第7行来将这两行合并为一行代码,如下所示:alist1, alist2 = partition(alist.remove(pivot), pivot),那么我的代码不起作用。我得到以下TypeError:

TypeError: 'NoneType' object is not iterable

想知道为什么我会遇到这个错误?

3 个答案:

答案 0 :(得分:2)

remove方法不返回修改后的列表,而在python中,如果函数没有返回任何内容,它会返回&#34; None

>>> a = [1, 2, 3]
>>> r = a.remove(2)
>>> r == None
True

答案 1 :(得分:1)

alist.remove(pivot)未返回实际列表,list.remove在Python中返回None

答案 2 :(得分:1)

您收到错误,因为alist.remove(pivot)未返回列表。

它不会返回任何内容(None)只是从列表中删除pivot

因此,您最终传递给您的partition方法是Nonetype对象而不是列表。